在学习C++的类时,碰到了构造函数,而关于构造函数又引申出了复杂情况下构造函数的调用顺序。看视频讲解、敲示例代码,算是大概清楚了调用次序,为了今后查询,特意在此记录一下。
- 构造函数:创建类对象时,初始化对象
- 复制构造函数:用已经存在的类对象,初始化一个新创建的同类型的类对象
复制构造函数调用的情况有三种:
1、用已存在的类对象,去初始化一个新创建的类对象
2、类对象作为函数的实参
3、类对象作为函数的返回值
- 组合类的构造函数:类的成员是另一个类的对象
当上述三个在一起出现时,各自的调用顺序是如何。也就是什么时候调用构造函数,什么时候调用复制构造函数,什么时候调用组合类的构造函数,而什么时候又调用组合类的复制构造函数??
以下的程序可以解释在上述都存在的情况下,调用次序。
#include <iostream>
using namespace std;
//点类
class Point {
public:
Point(int newX, int newY);//自定义构造函数
Point();//默认构造函数
Point(const Point& p);//复制构造函数
int getX() {
return x;
}
int getY() {
return y;
}
private:
int x;
int y;
};
//自定义构造函数实现
Point::Point(int newX, int newY) :x(newX), y(newY) {
cout