#include <iostream>
#include <iomanip>
using namespace std;
class S {
private:
string strName;
char point;
public:
S() : strName(""), point('\0') {}
S(const string& cstrName, char p) : strName(cstrName), point(p) {}
// operator==
friend bool operator==(char *sz, const S& k) {return k.strName == string(sz);};
friend bool operator==(char a, const S& k) {return k.point == a;}
friend bool operator==(const S& a, const S& b) {return a.strName == b.strName && a.point == b.point;}
bool operator==(const S& a) const {return strName == a.strName && point == a.point;}
bool operator==(const char *k) const {return strName == string(k);}
bool operator==(char k) const {return point == k;}
// operator=
//13.5.3 Assignment [over.ass]
//1 An assignment operator shall be implemented by a non-static member function with exactly one parameter.
// S& operator=(char k){point = k; cout << "inline";return *this;};
S& operator=(char c){point = c; return *this;};
S& operator=(char *k){strName = string(k); return *this;};
S& operator=(S& a) {strName = a.strName;point = a.point; return *this;}
friend ostream& operator<<(ostream& os, const S& s)
{
os << "Name: " << s.strName << "\nPoint: " << s.point;
return os;
}
};
int main()
{
S a("Hello World!", '.');
cout << "\nConstruction " << endl;
cout << a << endl;
cout << "\nAssigning char value: >>>,<<<" << endl;
a = ',';
cout << a << endl;
cout << "\nAssigning char* value: >>>New World<<<" << endl;
char c[] = "New World";
a = c;
cout << a << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2xhc3MgUyB7CnByaXZhdGU6CglzdHJpbmcgc3RyTmFtZTsKCWNoYXIgcG9pbnQ7CnB1YmxpYzoKCVMoKSA6IHN0ck5hbWUoIiIpLCBwb2ludCgnXDAnKSB7fQoJUyhjb25zdCBzdHJpbmcmIGNzdHJOYW1lLCBjaGFyIHApIDogc3RyTmFtZShjc3RyTmFtZSksIHBvaW50KHApIHt9CgkvLyBvcGVyYXRvcj09CglmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNoYXIgKnN6LCBjb25zdCBTJiBrKSB7cmV0dXJuIGsuc3RyTmFtZSA9PSBzdHJpbmcoc3opO307CglmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNoYXIgYSwgY29uc3QgUyYgaykge3JldHVybiBrLnBvaW50ID09IGE7fQoJZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTJiBhLCBjb25zdCBTJiBiKSB7cmV0dXJuIGEuc3RyTmFtZSA9PSBiLnN0ck5hbWUgJiYgYS5wb2ludCA9PSBiLnBvaW50O30KCWJvb2wgb3BlcmF0b3I9PShjb25zdCBTJiBhKSBjb25zdCB7cmV0dXJuIHN0ck5hbWUgPT0gYS5zdHJOYW1lICYmIHBvaW50ID09IGEucG9pbnQ7fQoJYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNoYXIgKmspIGNvbnN0IHtyZXR1cm4gc3RyTmFtZSA9PSBzdHJpbmcoayk7fQoJYm9vbCBvcGVyYXRvcj09KGNoYXIgaykgY29uc3Qge3JldHVybiBwb2ludCA9PSBrO30KCS8vIG9wZXJhdG9yPQoJLy8xMy41LjMgQXNzaWdubWVudCBbb3Zlci5hc3NdCgkvLzEgQW4gYXNzaWdubWVudCBvcGVyYXRvciBzaGFsbCBiZSBpbXBsZW1lbnRlZCBieSBhIG5vbi1zdGF0aWMgbWVtYmVyIGZ1bmN0aW9uIHdpdGggZXhhY3RseSBvbmUgcGFyYW1ldGVyLgoJLy8gUyYgb3BlcmF0b3I9KGNoYXIgayl7cG9pbnQgPSBrOyBjb3V0IDw8ICJpbmxpbmUiO3JldHVybiAqdGhpczt9OwoJUyYgb3BlcmF0b3I9KGNoYXIgYyl7cG9pbnQgPSBjOyByZXR1cm4gKnRoaXM7fTsKCVMmIG9wZXJhdG9yPShjaGFyICprKXtzdHJOYW1lID0gc3RyaW5nKGspOyByZXR1cm4gKnRoaXM7fTsKCVMmIG9wZXJhdG9yPShTJiBhKSB7c3RyTmFtZSA9IGEuc3RyTmFtZTtwb2ludCA9IGEucG9pbnQ7ICByZXR1cm4gKnRoaXM7fQoJZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IFMmIHMpCgkJewoJCW9zIDw8ICJOYW1lOiAiIDw8IHMuc3RyTmFtZSA8PCAiXG5Qb2ludDogIiA8PCBzLnBvaW50OwoJCXJldHVybiBvczsKCQl9Cgl9OwppbnQgbWFpbigpCnsKUyBhKCJIZWxsbyBXb3JsZCEiLCAnLicpOwpjb3V0IDw8ICJcbkNvbnN0cnVjdGlvbiAiIDw8IGVuZGw7CmNvdXQgPDwgYSA8PCBlbmRsOwpjb3V0IDw8ICJcbkFzc2lnbmluZyBjaGFyIHZhbHVlOiA+Pj4sPDw8IiA8PCBlbmRsOwphID0gJywnOwpjb3V0IDw8IGEgPDwgZW5kbDsKY291dCA8PCAiXG5Bc3NpZ25pbmcgY2hhciogdmFsdWU6ID4+Pk5ldyBXb3JsZDw8PCIgPDwgZW5kbDsKY2hhciBjW10gPSAiTmV3IFdvcmxkIjsKYSA9IGM7CmNvdXQgPDwgYSA8PCBlbmRsOwoKcmV0dXJuIDA7Cn0=