调用构造函数进行类型转换(显式和隐式)
代码示例
1 #include <iostream> 2 using namespace std; 3 class A 4 { 5 public: 6 A(int x){ i = x; cout << "构造函数执行!" << i << endl; }//可以关键字explicit用来禁止隐式转换,然而显式转换还可以用 7 ~A(){ cout << "析构函数执行!" << i << endl; } 8 void get(){ cout << i << endl; } 9 private: 10 int i; 11 }; 12 int main() 13 { 14 A a(99);//调用构造函数A(int x)输出"构造函数执行!99" 15 a.get(); 16 a = 1000;//隐式转换,等价于显式转换中的:a=A(1000); 17 a.get(); 18 a = A(2); //调用构造函数A(int x)输出"构造函数执行!2" 19 //生成A类临时对象赋值给a 20 //赋值之后,调用~A(),临时对象被销毁,输出"析构函数执行!2" 21 a.get();//调用get()函数输出2 22 //程序退出,销毁a对象,调用~A(),输出"析构函数执行!2" 23 A b(35); //调用构造函数A(int x)输出"构造函数执行!35 24 //函数结束时,析构顺序与构造顺序正好相反,先析构对象b再析构第一个创建的对象a 25 //调用对象b的析构函数,输出"析构函数执行!35" 26 //调用对象a的析构函数,输出"析构函数执行!2" 27 return 0; 28 }
输出结果