首页 > 代码库 > c++——派生类和基类转换

c++——派生类和基类转换

派生类经常(但不总是)覆盖它继承的虚函数。如果派生类没有覆盖其基类中的某个虚函数,则该虚函数的行为类似于其他的普通成员,派生类会直接继承其在基类中的版本。

c++11允许派生类显式地注明它使用某个成员函数覆盖了它继承的虚函数。具体做法是在形参列表后面、或者在const成员函数的const关键字后面、或者在引用成员函数的引用限定符后面添加一个关键字override。

派生类也必须使用基类的构造函数来初始化它的基类部分。(除非基类没有显式定义构造函数,这样在派生类的构造函数中可以不显式调用基类的构造函数)

我们可以把公共派生类当做基类使用,派生类可以赋值给基类,基类的引用或者指针可以绑定到派生类上(反之不行)。

遵循基类的接口:

尽管在语法上来说我们可以在派生类构造函数体内给它的共有或者受保护的基类成员赋值,但是最好不要这么做。和使用基类的其他场合一样,派生类应该遵循基类的接口,并通过调用基类的构造函数来初始化那些从基类中继承而来的成员。

如果基类定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义。不论基类中派生出来多少个派生类,对于每个静态成员都只存在唯一的实例。静态成员也要遵循通用的访问控制规则,public,private,protected。

如果我们想要将某个类用作基类,则该类必须是已经定义了的而不能仅仅声明。这意味着,一个类不能派生它本身。

 

有时候我们会定义这样一种类,我们不希望其他类继承它,或者不想考虑它是否适合作为一个基类,为了实现这一目的,c++11提供了一种防止继承发生的方法,即在类名后跟一个关键字final。

当我们用一个派生类对象为一个基类对象初始化或者赋值时,只有该派生类对象中的基类部分会被拷贝、移动或赋值,它的派生部分会被忽略掉。

如果表达式既不是指针也不是引用,那么它的动态类型永远与静态类型一致,如果是指针或者引用,将产生动态绑定,动态类型直到运行时才可知,而静态类型在编译时就总是已知的。

 

c++——派生类和基类转换