目录
何时需要拷贝函数?
下面我们看一段代码? - #include <iostream>
- using namespace std;
- class Line
- {
- public:
- string m_name;
- int m_age;
- Line();
- ~Line(); // 析构函数
- void show();
- };
- Line:: Line()
- {
- cout << "无参构造被调用" << endl;
- }
- Line:: ~Line()
- {
- cout << "析构函数~Line()被调用" << endl;
- }
- void Line:: show()
- {
- cout << "姓名:" << m_name << ",年龄: " << m_age << endl;
- }
- int main()
- {
- Line line1("张三", 18);
- Line line2 = line1;
- return 0;
- }
复制代码这时候编译,会提示你
已经告诉你答案了。
拷贝构造函数的规则
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。
- 用一个已存在的对象创建新的对象,不会调用(普通)构造函数,而是调用拷贝构造函数。
- 如果类中没有定义拷贝构造函数,编译器将提供一个拷贝构造函数,它的功能是把已存在对象的成员变量赋值给新的对象的成员变量。
- 用一个已存在的对象创建新的对象语法:
- Line line1("张三", 18);
- Line line2(line1);
复制代码- Line line1("张三", 18);
- Line line2 = line1;
复制代码 拷贝构造函数的写法- classname (const classname &obj)
- {
- // 构造函数的主体
- }
复制代码接下来把上面的例子补齐 - #include <iostream>
- using namespace std;
- class Line
- {
- public:
- string m_name;
- int m_age;
- Line();
- Line(string name, int age); // 构造函数
- Line(const Line &obj);
- Line(const Line &obj, int n);
- ~Line(); // 析构函数
- void show();
- };
- Line:: Line()
- {
- cout << "无参构造被调用" << endl;
- }
- Line:: Line(string name, int age)
- {
- m_name = name;
- m_age = age;
- cout << "构造函数Line(string name1, int age)被调用" << endl;
- }
- Line:: Line(const Line &obj)
- {
- cout << "拷贝构造函数被调用" << endl;
- cout << "拷贝构造 - 姓名:" << obj.m_name << ",拷贝构造 - 年龄: " << obj.m_age << endl;
- m_name = obj.m_name;
- m_age = obj.m_age;
- }
- Line:: ~Line()
- {
- cout << "析构函数~Line()被调用" << endl;
- }
- // 实现成员函数
- void Line:: show()
- {
- cout << "姓名:" << m_name << ",年龄: " << m_age << endl;
- }
- int main()
- {
- Line line1("张三", 18);
- Line line2 = line1;
- line2.show();
- return 0;
- }
复制代码执行结果如下:
到此这篇关于详解C++何时需要拷贝构造函数的文章就介绍到这了,更多相关c++ 拷贝构造函数内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |