c++拷贝构造函数与赋值运算
来源:互联网 发布:淘宝助理5.8图片搬家 编辑:程序博客网 时间:2024/06/07 19:09
在C++中,我们写一个class后,如果自己没有声明,那么编译器就会为它声明(编译器版本的)一个拷贝构造函数、一个拷贝赋值操作符和一个析构函数。此外,如果我们没有声明任何构造函数,编译器也会为我们声明一个default构造函数。所有这些函数都是public且inline的。
class Empty{};
class Empty{public: Empty(){...}; Empty(const Empty& rhs){...}; ~Empty(){...}; Empty& operator=(const Empty& rhs){...};};
所以你写下上面的代码,就好像你写下了下面的代码。当这些函数被调用时,它们才会被编译器创建出来。
如果我们自己声明了构造函数,那么编译器就不再为它创建default构造函数了。
#include <iostream>#include <string>template<typename T>class NamedObject {public: NamedObject(const char* name, const T& value); NamedObject(const std::string& name, const T& value); void showObject();private: std::string nameValue; T objectValue;};template<typename T>NamedObject<T>::NamedObject(const char* name, const T& value) { nameValue = name; objectValue = value;}template<typename T>NamedObject<T>::NamedObject(const std::string& name, const T& value) { nameValue = name; objectValue = value;}template<typename T>void NamedObject<T>::showObject() { std::cout << "The name is: " << nameValue << std::endl; std::cout << "The value is: " << objectValue << std::endl;}int main() { NamedObject<int> no1("Haha", 2); NamedObject<int> no2(no1); no1.showObject(); no2.showObject(); system("pause"); return 0;}
最后运行的结果如下:
编译器生成的拷贝构造函数帮我们完成了初始化。no2.nameValue的初始化方式是调用string的copy构造函数并以no1.nameValue为实参。另一个成员NamedObject<int>::objectValue
的类型为int,那是一个内置类型,所以no2.objectValue会以拷贝no1.objectValue内的每一个bit来完成初始化。
参考资料:《Effective C++ 中文版》第三版
1 0
- 拷贝构造函数与赋值运算符
- 拷贝构造函数与赋值运算符
- 拷贝构造函数与赋值运算符
- c++拷贝构造函数与赋值运算
- 拷贝构造函数与赋值运算符的重载函数
- [C++]拷贝构造函数和赋值运算符重载
- 重载赋值运算符与拷贝构造函数的区别
- 拷贝构造函数与赋值运算符重载的区别
- 拷贝构造函数与赋值运算符的区别
- 拷贝构造函数与赋值运算符重载的区别
- 重载赋值运算符与拷贝构造函数的区别
- 重载赋值运算符与拷贝构造函数的区别
- 拷贝构造函数与赋值运算符重载的区别
- 拷贝构造与赋值函数
- 拷贝构造函数 与 拷贝赋值函数
- 默认构造函数,拷贝构造函数,拷贝赋值运算符
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- gradle使用
- 在python中导入gensim出错
- JQuery Div scrollTop ScrollHeight
- spring-spring mvc-mybatis 实现主从数据库配置
- 【蓝桥】 历届试题 带分数
- c++拷贝构造函数与赋值运算
- 基于SSM框架实现数据库的基本功能(一)
- shuffle()方法、removeAttribute() 方法、split()方法
- 据说.NetCore效率很高?性能简单测试
- 计算机网络1-计算机网络体系结构
- JavaScript脚本和JSON数据格式
- Javascript常用
- 【SDOI2015】bzoj3991 寻宝游戏
- 如何通过JQuery将DIV的滚动条滚动到指定的位置