// constructor.cpp show various constructors and usage class A1 // only default constructor A1 obj; { public: private: int a_pri; }; class A2 // only one int constructor A2 obj(7); or A2 obj=7; { public: A2(int i) { a_pri=i; } private: int a_pri; }; class A3 // only one int constructor A3 obj(7); or A3 obj=7; { public: A3(int i): a_pri(i) {} // using initialization syntax private: int a_pri; }; class A4 // only one int constructor A4 obj(7); NOT A4 obj=7; { public: explicit A4(int i): a_pri(i) {} // using "explicit" explicit A4(A4 & x): a_pri(x.a_pri) {} // copy constructor A4 & operator=(A4 & x) { a_pri=x.a_pri; return *this; } private: int a_pri; }; int main() // the commented out lines are illegal, compiler errors { A1 obj_a1_1; // A1 obj_a1_2(7); no A1 constructor takes an int // A1 obj_a1_3 = 7; converting int to type A1 // A2 obj_a2_1; no default constructor, no zero parameter A2 obj_a2_2(7); A2 obj_a2_3= 7; // A3 obj_a3_1; no default constructor, no zero parameter A3 obj_a3_2(7); A3 obj_a3_3= 7; A3 obj_a3_4(obj_a3_2); // using default "copy constructor" obj_a3_4 = obj_a3_2; // using default operator= // A4 obj_a4_1; no default constructor, no zero parameter A4 obj_a4_2(7); // A4 obj_a4_3= 7; requires explicit parameter A4 obj_a4_4(obj_a4_2); // using explicit "copy constructor" obj_a4_4 = obj_a4_2; // using class defined operator= return 0; }