没有合适的资源?快使用搜索试试~ 我知道了~
4_深拷贝,浅拷贝,临时对象1
需积分: 0 0 下载量 8 浏览量
2022-08-08
18:37:38
上传
评论
收藏 107KB DOCX 举报
温馨提示
试读
12页
1. 对象以值传递的方式传入函数参数#include <iostream>using namespace std 3. 对象需要通过另外一个对象进行初始化 3.
资源详情
资源评论
资源推荐
C++拷贝构造函数详解
首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:
int a = 100;
int b = a;
而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。
下面看一个类对象拷贝的简单例子。
#include <iostream>
using namespace std;
class CExample
{
private:
int a;
public:
//构造函数
CExample(int b)
{
a = b;
}
// 一般函数
void show()
{
cout << a << endl;
}
};
int main()
{
CExample A(100);
CExample B = A; // 注意这里的对象初始化要调用拷贝构造函数,而非赋值
B.show();
return 0;
}
运行程序,屏幕输出 100。从以上代码的运行结果可以看出,系统为对象 B 分配了内存并
完成了与对象 A 的复制过程。就类对象而言,相同类型的类对象是通过拷贝构造函数来完
成整个复制过程的。
下面举例说明拷贝构造函数的工作过程。
#include <iostream>
using namespace std;
class CExample
{
private:
int a;
public:
//构造函数
CExample(int b)
{
a = b;
}
//拷贝构造函数
CExample(const CExample &C)
{
a = C.a;
}
// 一般函数
void show()
{
cout << a << endl;
}
};
int main()
{
CExample A(100);
CExample B = A; // 注意这里的对象初始化要调用拷贝构造函数,而非赋值
B.show();
return 0;
}
CExample(const CExample& C) 就是我们自定义的拷贝构造函数。可见,拷贝构造函数是一
种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用
变量。
二. 拷贝构造函数的调用时机
在 C++中,下面三种对象需要调用拷贝构造函数!
1. 对象以值传递的方式传入函数参数
#include <iostream>
using namespace std;
class CExample
{
private:
int a;
public:
//构造函数
CExample(int b)
{
a = b;
cout << "Creat:"<< a << endl;
}
//拷贝构造函数
CExample(const CExample &C)
{
a = C.a;
cout << "copy" << endl;
}
~CExample()
{
cout << "delete:" << a << endl;
}
// 一般函数
void show()
{
cout << a << endl;
}
};
// 全局函数,传入的是对象
void g_Fun(CExample C)
{
cout << "test" << endl;
}
int main()
{
CExample test(1);
//传入对象
g_Fun(test);
return 0;
}
/*
Creat:1
copy
test
delete:1
delete:1
剩余11页未读,继续阅读
宝贝的麻麻
- 粉丝: 35
- 资源: 294
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0