[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]

constructor_test.zip