//调用无参构造函数voidtest01(){
Person p;//调用无参构造函数}//调用有参的构造函数voidtest02(){//2.1 括号法,常用, QString str("This is a demo")
Person p1(10);//注意1:调用无参构造函数不能加括号,如果加了编译器认为这是一个函数声明//Person p2();//2.2 显式法
Person p2 =Person(10);
Person p3 =Person(p2);//Person(10)单独写就是匿名对象 当前行结束之后,马上析构//2.3 隐式转换法
Person p4 =10;// Person p4 = Person(10);
Person p5 = p4;// Person p5 = Person(p4); //注意2:不能利用 拷贝构造函数 初始化匿名对象 编译器认为是对象声明//Person p5(p4);}
拷贝构造的使用场景
序号
场景
备注
1
使用一个已经创建完毕的对象来初始化一个新对象
2
值传递的方式给函数传值
3
以值方式返回局部对象
场景1
使用一个已经创建完毕的对象来初始化一个新对象
voidtest_scene_1(void){
Person man(18);//创建一个对象
Person new_man(man);//调用拷贝构造函数
Person another_man = man;//拷贝构造}
场景 2
值传递的方式给函数参数传值
voiddowork(Person p1){
cout<<p.age<<endl;}voidtest_scene_2(){
Person p;//无参构造函数dowork(p);}
场景3
以值方式返回局部对象
Person dowork2(){
Person p1;//无参构造函数
cout <<(int*)&p1 <<endl;//输出地址:010FF6C0return p1;//利用p1创建一个新的对象,返回给外部,并不是返回上面的p1,因为栈变量在函数退出时,就释放空间了。}voidtest_scene_3(void){
Person p =dowork2();
cout <<(int*)&p << endl;//输出地址:010FF7B8//退出该函数时调用析构函数}