初始化与赋值的区别
来源:互联网 发布:淘宝衣服代理加盟 编辑:程序博客网 时间:2024/05/16 12:02
在C++中,利用=
初始化和赋值咋一看很相似,其实背后的实现原理完全不同,本文尝试讲解其中一二,不至于在脑海中混淆两者的概念.
请看如下示例代码:
class Paper {public: unsigned int width; unsigned int height;public: Paper() { cout << "Paper constructor in_1" << endl; } Paper(const Paper &paper) { cout << "Paper constructor in_2" << endl; this->width = paper.width; this->height = paper.height; } void operator=(Paper &paper) { cout << "operator = in." << endl; this->width = paper.width; this->height = paper.height; }};int main(){ Paper paper_1; paper_1.width = 20; paper_1.height = 10; cout << "---------------------->" << endl; Paper paper_2; paper_2 = paper_1; // 赋值 cout << "width:" << paper_2.width << " height: " << paper_2.height << endl; cout << "---------------------->" << endl; Paper paper_3 = paper_1; // 初始化 cout << "width:" << paper_3.width << " height: " << paper_3.height << endl; cout << "---------------------->" << endl; Paper paper_4(paper_1); // 初始化 cout << "width:" << paper_4.width << " height: " << paper_4.height << endl; cout << "---------------------->" << endl; return 0;}
打印输出如下:
Paper constructor in_1---------------------->Paper constructor in_1operator = in.width:20 height: 10---------------------->Paper constructor in_2width:20 height: 10---------------------->Paper constructor in_2width:20 height: 10---------------------->
分析如下:
paper_2 = paper_1; // 赋值
该语句中paper_1
和paper_2
已经存在,其中的=
完成了赋值操作,调用的是我们重载的operator=
函数.
Paper paper_3 = paper_1; // 初始化
该语句首先调用Paper::Paper()
构造函数,构造出paper_1
,紧接着调用Paper::Paper(const Paper &paper)
构造paper_3
,可见=
完成的并不是一个赋值操作,而是一个初始化(构造)操作.
通过打印能看出来
Paper paper_3 = paper_1; // 初始化
和
Paper paper_4(paper_1); // 初始化
功能是一致的,均完成了初始化操作.
0 0
- 初始化与赋值的区别
- 初始化与赋值的区别
- 初始化与赋值的区别
- 初始化与赋值的区别
- C++初始化与赋值的区别
- c++-赋值与初始化的区别
- C++赋值与初始化的区别
- 初始化与赋值之间的区别
- 初始化与赋值之间的区别
- 初始化、赋值的区别
- 字符串初始化与赋值区别
- C++中类对象的初始化与赋值的区别
- 初始化和赋值的区别
- 初始化和赋值的区别
- 初始化和赋值的区别
- 初始化和赋值的区别
- 初始化和赋值的区别
- 初始化和赋值的区别
- Java NIO 简单教程
- 设置h5页面不可复制文字、图片
- Java IdentityHashMap
- Facebook Yarn 包管理器,类似npm
- svn 报Failed to load JavaHL Library.错误的解决办法
- 初始化与赋值的区别
- CentOS安装python3详细步骤
- Android图像显示的底层原理
- oracle双实例单监听的各种问题和解决
- eclipse打印gc日志
- 深度学习(四十五)条件对抗网络
- 关于有偿提供拼图响应式后台的通知
- oracle双实例单监听的各种问题和解决
- 升级Ubuntu14.04 内核到Linux 4.2.0支持overlay