【C++】浅谈对派生类构造函数的理解

继承中对派生类构造函数的理解

继承是C++中一一个非常重要的机制,通过继承,使得多态成为了可能
以下是本人对继承中派生类的构造函数的理解

class Shape
{
public:
	Shape(const char* color) { strcpy_s(s_color, strlen(color) + 1, color); }
	char* GetColor() { return s_color; }
private:
	char s_color[20];
};

定义了一个基类Shape,Shape包含:
带参数的构造函数
一个获取颜色的函数
一个私有成员变量:颜色
注:由于strcpy在VS2019中会直接报错为“unsafe”,所以使用了strcpy_s()

class Circle :public Shape
{
public:
	

> Circle(float x, float y, float r, const char* color) :Shape(color)

  //调用派生类的构造函数
	{
		c_x = x;
		c_y = y;
		c_r = r;
	}
	float GetRadius() { return c_r; }
	float GetX() { return c_x; }
	float GetY() { return c_y; }
private:
	float c_x, c_y, c_r;
};

定义一个派生类Circle,公有继承于Shape类

Circle(float x, float y, float r, const char* color) :Shape(color)

这行代码表示了派生类显式的调用了基类的构造函数
我是这样理解的:
派生类在继承基类的时候,会完全继承基类的所有方法和属性(包括私有成员变量),而派生类继承基类的方式有:public、protected、private,无论以哪种方式继承,基类的私有成员都是不可访问(在派生类中)的,但是派生类在初始化自己的成员变量的时候,需要先初始化基类的成员变量,由于不可访问,所以必须调用基类的构造函数,对来自基类的成员变量进行初始化,所以,派生类的构造函数,需要先调用基类的构造函数

注:由于基类不存在默认构造函数,所以派生类必须显式的调用基类的构造函数。

关于调用顺序:
由于派生类必须先初始化基类的数据成员,所以构造函数的调用顺序应该为:先调用基类的构造函数,再调用派生类的构造函数。
而关于析构函数,继承中,派生类的析构函数与基类的析构函数调用顺序相反:先调用派生类的析构函数,再调用基类的析构函数

本人萌新,初学C++,观点和理念不全面,浅谈个人看法,望各路大牛多多指点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值