继承与派生(粗略)

派生权限

派生(继承):

​ 通过派生,派生类(子类)会获得(父类)除了构造器和析构器之外的所有成员(包括数据和函数成员)。是最自然的一种代码反用的方式

派生语法:

**class 派生类名: [派生方式] 基类名
**{
派生类新增加的成员
}

注意

1.基类的构造函数和析构函数不能被继承,在派生类中,如果对派生类新增的成员进行初始化,需要加入派生类的构造函数 当派生类创建对象时,首先执行基类的构造函数,随后执行派生类的构造函数;

2.当撤销派生类对象时,先执行派生类的析构函数,在执行基类的析构函数。
当基类的构造函数没有参数或没有显式定义构造函数时,派生类可以不向基类传递参数,甚至可以不定义构造函数。

3.当基类构造函数不带参数时,派生类不一定需要定义构造函数,然而当基类构造函数哪怕只是带有一个参数,他所有的派生类都必须定义构造函数,甚至所定义的派生类构造函数可能为空,仅仅起参数传递的作用。

在定义派生类对象时,构造函数的执行顺序如下
1.调用基类的构造函数,对基类数据成员初始化
2.调用内嵌对象成员的构造函数,对内嵌对象成员的数据初始化;
3.执行派生类的构造函数体,对派生类数据成员初始化。
撤销对象时,析构函数的调用顺序与构造函数的调用顺序正好相反。

继承体系中的作用域

1.在继承体系中,基类和派生类是两个不同的作用域,由此也进一步证明 ,基类的私有成员,无论在那种继承体系下都不能在派生类中访问。
2.在继承体系中,基类和派生类中如果存在相同名字的成员,如果使用派生类对象调用此成员,会优先调用派生类中存在的成员,把基类中存在的隐藏掉—->同名隐藏
相同名字的成员:同名成员变量、同名成名函数(与变量和函数的类型无关,只要是相同名字就好)
所以,不要在继承体系中使用相同名字的成员

继承与派生之间的关系—>赋值兼容规则