关于拷贝对象不调用初始化函数,如何给拷贝对象初始化?
class.h部分代码:
Teacher(string name="Jim", int age = 15);
Teacher(const Teacher &T);
class.cpp部分代码:
Teacher::Teacher(string name, int age) :m_strName(name),m_iAge(age){cout << "Teacher(string name, int age)" << endl;}
Teacher::Teacher(const Teacher &T) {cout << "Teacher(const Teacher &T)" << endl;}
main.cpp部分代码:
Teacher t2;
cout << t2.getName() << " " << t2.getAge() << endl;
Teacher t3 = t2;
cout << t3.getName() << " " << t3.getAge() << endl;
运行结果如图
我想到的解决方案是:
在main.cpp文件中加入设置代码:setName(name);setAge(age);
缺点:对于const常量类型会引起编译器无法编译,无法初始化。
拷贝函数中加入初始化列表?
Teacher::Teacher(const Teacher &T) :m_strName(T.m_strName),m_iAge(T.m_iAge){cout << "Teacher(const Teacher &T)" << endl;}
实验结果是成功的
由此思考一个问题:如果让系统自动生成拷贝构造函数,它是否是默认将被拷贝对象的值传到拷贝对象中?如果成立,则可以证明系统自动生成的拷贝构造函数中是带初始化列表的。
我将拷贝构造函数头文件都删除并运行,得出结果如下
由于没有拷贝构造函数,所以输出中少一句Teacher(const Teacher &T)。但是结果正确,所以这个论点是成立的。
问着问题问着解决了问题,有缘看到此的学友希望对你有帮助。再次感谢制作此系列教程的老师,简直太强了!