C++学习记录-面向对象-拷贝构造函数

拷贝构造函数

拷贝构造函数是构造函数的一种,它传入的参数是一个类

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class chara {
private:
string name;
public:
chara()
{
cin >> name;
}

//这个是拷贝构造函数
chara(const chara &p)
{
name = p.name;
}
};

可以看到拷贝构造函数有以下几点要求:

  1. 传入的参数是一个类
  2. 必须是引用传递
  3. 必须以 const 修饰

拷贝构造函数可以将传入的类赋值给自己的类,相当于复制了一个类 //安度因表示很赞

调用示例:

1
2
3
4
5
6
7
8
int main()
{
chara p1;//创建一个对象p1

chara p2(p1);//创建一个对象p2,并将p1传入其拷贝构造参数中

cout << p2.name;//打印p2的name属性
}

运行结果:

神里绫华
神里绫华
D:\Work\C艹练习\练手\Project1\Debug\Project1.exe (进程 4200)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

注意事项:

不要用拷贝构造函数来初始化一个匿名对象

匿名对象:只传入构造函数的参数而不声明对象名字

例:

1
chara();//这创建了一个匿名对象

如果利用拷贝构造函数来初始化一个匿名对象:

1
2
3
chara p1;

chara(p1);//用拷贝构造函数初始化匿名对象

程序会报错:

1>D:\Work\C艹练习\练手\Project1\Project1\源.cpp(27,11): error C2086: “chara p1”: 重定义

编译器会认为又声明了一个叫p1的对象,而上方已经声明了p1这个对象