C++ 派生类的拷贝构造函数

当存在类的继承关系时,对于一个类,如果程序员没有编写拷贝构造函数,编译系统会在必要时自动生成一个隐含的拷贝构造函数,这个隐含的拷贝构造函数会自动调用基类的拷贝构造函数,然后对派生类新增的成员对象一一执行拷贝。

如果要为派生类编写拷贝构造函数,一般需要为基类相应的拷贝构造函数传递参数。例如,假设D类是B类的派生类,D类的拷贝构造函数形式如下:

D::D(const Derived &v):B(v){
    
    ...}

【例】

class B
{
    
    
public:
	B(int x = 0):x(x)
	{
    
    
		cout << "基类B构造函数" << endl;
	}
	B(B& b)
	{
    
    
		cout << "基类B的拷贝构造函数" << endl;
		x = b.x;
	}
	void show1()
	{
    
    
		cout <<"x的值为:"<< x << endl;
	}
	int getX()
	{
    
    
		return x;
	}
private:
	int x;
};

class D :public B
{
    
    
public:
	D(int a, int b, int c, int d):B(a),y(b),z(c),v(d)
	{
    
    
		cout << "派生类D的构造函数" << endl;
	}
	D(D& dd) :B(dd)//用派生类的对象dd去初始化基类的引用
	{
    
    
		cout << "派生类D的拷贝构造函数" << endl;
		x = dd.x;
		y = dd.y;
		z=  dd.z;
		v = dd.v;
	}
	
	void show2()
	{
    
    
		cout << "x的值为:" << getX() << endl;
		cout << "y的值为:" << y << endl;
		cout << "z的值为:" << z << endl;
		cout << "v的值为:" << v << endl;
	}
private:
	int x;
	int y;
	int z;
	int v;
};

int main()
{
    
    
	B b(5);
	b.show1();

	D d(1, 2, 3, 4);
	d.show2();

	D dd(d);
	dd.show2();
	return 0;
}

运行结果:
在这里插入图片描述
由于类型兼容规则的作用,可以用派生类的对象去初始化基类的引用,所以上面B类的拷贝构造函数的参数是D类对象的引用dd。

猜你喜欢

转载自blog.csdn.net/NuYoaH502329/article/details/132129389