C++ 编译器会为你的类添加那些成员函数?
来源:互联网 发布:电脑网络电话软件 编辑:程序博客网 时间:2024/06/06 06:22
一个空的C++类, 编译器会给你做什么?
如果你没有如下函数, 体贴的编译器会为你声明它自己的版本:
一个缺省的构造函数, 一个拷贝构造函数, 一个析构函数, 一个赋值运算符, 一对取址运算符.
例:
class Empty{};
等价于:
class Empty {
public:
Empty(); // 缺省构造函数
Empty(const Empty& rhs); // 拷贝构造函数
~Empty(); // 析构函数
Empty& operator=(const Empty& rhs); // 赋值运算符
Empty* operator&(); // 取址运算符
const Empty* operator&() const;// 取址运算符(const 版本)
};
我们代码中是怎么用的:
const Empty e1; // 缺省构造函数
// 析构函数
Empty e2(e1); // 拷贝构造函数
e2 = e1; // 赋值运算符
Empty *pe2 = &e2; // 取址运算符 (非const)
const Empty *pe1 = &e1; // 取址运算符 (const)
C++编译器对这些函数的实现:
inline Empty::Empty() {} // 缺省构造函数
inline Empty::~Empty() {} // 析构函数
inline Empty * Empty::operator&() { return this; } // 取址运算符 (非const)
inline const Empty * Empty::operator&() const { return this; } // 取址运算符 (const)
至于拷贝构造函数和赋值运算符, 官方的标准是:
对类的非静态数据成员进行以"以成员为单位"逐一拷贝构造(赋值).
如:m是类C中的一个类型为T的非静态成员变量, 若C没有声明拷贝构造函数(赋值运算符),
m将会通过T的拷贝构造函数(赋值运算符)被拷贝构造(赋值)----------------T有拷贝构造函数;
规则递归应用到m的数据成员, 直到找到一个拷贝构造函数(赋值运算符)或固定类型(例如: int, double, 指针, 等)为止.
固定类型的对象拷贝构造(赋值)时是从源对象到目标对象的 "逐位" 拷贝。
- C++ 编译器会为你的类添加那些成员函数?
- c++编译器会为类添加那些成员函数
- C++编译器会为类添加哪些成员函数
- C++编译器会为类添加哪些成员函数
- 当需要为一个既存的类中增加一个数据成员的时候,你会想到那些问题?
- 编译器为类构建那些默认函数?
- C++编译器会为类产生哪些默认的成员方法?---聊聊C++的Big Three
- VS编译器为你报的那些错
- 类会默认产生的成员函数
- 关于编译器对c++ 类静态成员、静态成员函数、非静态成员函数的处理
- 函数指针类的虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址。 注意的是,编译器会为每个有虚函数的类创建一个虚函数表,该虚函数表将被该类的所有对象共享。类的每个虚成员占据虚函数表中的一
- 类的设计--编译器生成的成员函数
- C++空类,编译器默认产生的成员函数
- C++:类的成员函数
- 什么时候编译器会合成派生类的构造函数
- 巧用成员模板函数为你的类留下后门
- 巧用成员模板函数为你的类留下后门
- 巧用成员模板函数为你的类留下后门
- 三层架构及其优缺点
- 大数类的简单实现
- matlab 实现的kalman滤波
- 无线破解攻击工具Aircrack-ng使用详解
- 奔腾指令速查手册
- C++ 编译器会为你的类添加那些成员函数?
- Why Vector Clocks are Easy
- 转:C++多线程调试和测试的注意事项
- PHP on IIS7.5 (Win7)
- MySQL的基本使用
- 批量启用邮箱!
- Activity 之间实现自定义动画跳转
- 【贪吃蛇—Java程序员写Android游戏】系列 1.Android SDK Sample-Snake详解
- job 定时任务