Total Articles 180
[Class]
class String { public: // // constructor // String() { cout << "constructor()\n"; } // default constructor String(char* p) { cout << "constructor(char*)\n"; } // explicit constructor String(const char* p) { cout << "constructor(const char*)\n"; } // explicit constructor String(const String& rhs) { cout << "constructor(const String)\n"; } // copy constructor // // destructor // virtual ~String() { cout << "destructor\n"; } // // operator // String& operator = (char* p) { cout << "operator=(char*)\n"; return *this; } String& operator = (const char* p) { cout << "operator=(const char*)\n"; return *this; } String& operator = (const String& rhs) { cout << "operator=(const String)\n"; return *this; } };
[Test]
int main() { String myObject1("test"); // constructor(const char*) String myObject2 = "test"; // constructor(const char*) String myObject3; // constructor() myObject3 = "test"; // operator=(const char*) String myObject4(myObject1); // constructor(const String) String myObject5 = myObject1; // constructor(const String) String myObject6; // constructor() myObject6 = myObject1; // operator=(const String) const char* cp = "test"; myObject6 = cp; // operator=(const char*) char* p = "test"; myObject6 = p; // operator=(char*) return 0; }
[Result]
$ constructor_test.exe
constructor(const char*)
constructor(const char*)
constructor()
operator=(const char*)
constructor(const String)
constructor(const String)
constructor()
operator=(const String)
operator=(const char*)
operator=(char*)
destructor
destructor
destructor
destructor
destructor
destructor
[Notes]
1. If operator "=" exists with its declaration of the object, compiler does not call "operator =" function, but call "explicit constructor".
2. (const char*) operator is prior to (char*) operator.
[Download]