拷贝构造函数的两种调用方式
- 什么是拷贝构造函数
- 两种调用方式是什么
阅读之前注意:
本文阅读建议用时:17min
本文阅读结构如下表:
项目 | 下属项目 | 测试用例数量 |
---|---|---|
什么是拷贝构造函数 | 无 | 1 |
两种调用方式是什么 | 无 | 1 |
什么是拷贝构造函数+两种调用方式是什么
参考以下代码:
#define _CRT_SECURE_NO_WARNINGS
#include "iostream"
using namespace std;
#include<string.h>
class Test
{
public:
Test();//默认构造函数
~Test();//析构函数
Test(Test &obj);//拷贝构造函数
public:
void setBuf(const char *str)
{
strcpy(buf, str);
}
void setA(int a)
{
m_a = a;
}
int getA()
{
return m_a;
}
char *getBuf()
{
return buf;
}
void print()
{
printf("m_a=%d,buf=%s\n", m_a, buf);
}
private:
int m_a;
char buf[32];
};
Test::Test()
{
m_a = 0;
strcpy(buf, "just do it");
cout << "默认构造..." << endl;
}
Test::~Test()
{
cout << "析构..." << endl;
}
Test::Test(Test &obj)
{
m_a = obj.getA();
strcpy(buf, obj.getBuf());
cout << "拷贝构造..." << endl;
}
void objPlay2()
{
Test t1;
t1.setA(12);
t1.setBuf("nice");
t1.print();
Test t2 = t1;//拷贝构造函数调用方式一
t2.print();
Test t3(t1);//拷贝构造函数调用方式二
t3.print();
}
void main()
{
objPlay2();//搭建一个舞台,为了完整展现对象的生命周期
system("pause");
}
拷贝构造函数,即当你按照两种正确的调用方式(67和70行)使用时,对声明对象的初始化按照拷贝构造函数里所写的操作来,而不会采用默认构造函数或者其他有参构造函数。另外本例中还提供构造和析构过程的展示,展现对象的生命周期1.
在下一篇博客中将会讨论拷贝构造函数调用中的陷阱。
如果本文对你有帮助,不如请我一罐可乐吧 🍼
测试用例基于王保明先生的讲课内容. ↩︎