《C++11Primer》阅读随记 -- 十三、拷贝控制
2021/4/8 14:25:52
本文主要是介绍《C++11Primer》阅读随记 -- 十三、拷贝控制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 第十三章 拷贝控制
- 拷贝构造函数
- 拷贝赋值运算符
- 重载赋值运算符
第十三章 拷贝控制
拷贝构造函数
如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数
class Foo{ public: Foo(); // 默认构造函数 Foo(const Foo&); // 拷贝构造函数 // ... };
作为一个例子,Sales_data
类的合成拷贝构造函数等价于:
class Sales_data{ public: // 其他成员和构造函数的定义,如前 // 与合成的拷贝构造函数等价的拷贝构造函数的声明 Sales_data(const Sales_data&); private: std::string bookNo; int units_sold = 0; double revenue = 0.0; }; // 与 Sales_data 的合成的拷贝构造函数等价 Sales_data::Sales_data(const Sales_data& orig): bookNo(orig.bookNo), units_sold(orig.units_sold),revenue(orig.revenue) {}
拷贝初始化不仅在我们用 =
定义变量时会发生,在下列情况下也会发生
- 将一个对象作为实参传递给一个非引用类型的形参
- 从一个返回类型为非引用类型的函数返回一个对象
- 用花括号列表初始化一个数组中的元素或一个聚合类中的成员
拷贝赋值运算符
重载赋值运算符
重载运算符本质上是函数,其名字由 operator
关键字后接表示要定义的运算符的符号组成。因此,赋值运算符就是一个名为 operator=
的函数。
重载运算符的参数表示运算符的运算对象。某些运算符,包括赋值运算符,必须定义为成员函数。如果一个运算符是一个成员函数,其左侧运算对象就绑定到隐式的 this
参数。对于一个二元运算符,例如赋值运算符,其右侧运算对象作为显示参数传递
拷贝赋值运算符接受一个与其所在类相同类型的参数:
class Foo{ public: Foo& operator=(const Foo&); // 赋值运算符 // ... };
下面的代码等价于 Sales_data
的合成拷贝赋值运算符
Sales_data& Sales_data::operator=(const Sales_data& rhs){ bookNo = rhs.bookNo; units_sold = rhs.units_sold; revenue = rhs.revenue; return *this; }
这篇关于《C++11Primer》阅读随记 -- 十三、拷贝控制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享