派生类

来源:互联网 发布:淘宝男鞋店推荐 知乎 编辑:程序博客网 时间:2024/05/06 04:51

派生类的虚函数

派生类经常(但不总是)覆盖它继承的虚函数.
派生类可以在它覆盖的函数前使用virtual关键字,但不是非得这么做
具体做法是:在形参裂变后面,或者在const成员函数的const后面,或者在引用成员函数的引用限定符后面添加一个关键字override

派生类对象及派生类向基类的类型转换

一个派生类对象包含多个组成部分:一个含有派生类自己定义的(非静态)成员的子对象,以及一个与该派生类继承的基类对应的子对象,如果有多个基类,那么这样的子对象也有多个.

Quote item;//基类对象Bulk_quote bulk;//派生类对象Quote *p=&item;//p指向Quote对象p=& bulk;//p指向bulk的Quote部分quote &r=bulk;//r绑定到bulk的Quote部分

这类转换称为派生类到基类类型转换

派生类构造函数

尽管在派生类对象中含有基类继承而来的成员,但是派生类并不直接初始化这些成员,派生类必须使用基类的构造函数来初始化它的基类部分

派生类对象的基类部分与派生类对象自己的数据成员都是在构造函数的初始化阶段执行初始化操作的,类似初始化成员的过程,派生类构造函数同样是通过构造函数初始化列表来将实参传递给基类构造函数的.
例如:

Bulk_quote(const string& book, double p,size_t qty, double disc) :        quote(book, p), min_qty(qty), discount(disc){}};

该函数将它前两个参数(分别表示isbn和价格)传递给Quote的构造函数,由Quote的构造函数负责初始化Bulk_quote的基类部分,当(空的)Quote构造函数体结束后,我们构建的对象的基类部分也就完成初始化,接下来就是初始化由派生类直接定义的min_qty和discount成员.

派生类使用基类的成员
派生类可以访问基类的共有成员和受保护的成员

继承和静态成员

如果基类定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义
例如:

class Base {public:    static void statmen();};class Derived:public Base {    void f(const Derived&);};//静态成员遵循通常的访问控制规则,如果基类的成员是private的,则派生类无法访问void Derived::f(const Derived& derived_obj){    Base::statmem();//正确,base定义了statmem    Derived::statmem();//正确,Derived继承了statmem    //正确,派生类的对象能访问基类的静态成员    derived_obj.statmem();//通过Derived对象访问    statmem();//通过this访问

派生类的声明:
class Bulk_quote : public Quote;//错误,派生列表不能出现在这里
class Bulk_quote;//正确

被用做基类的类

如果我们想将某个类用作基类,则该类必须是已经定义而非仅仅声明
原因是:派生类中包含并且可以使用它从基类继承而来的成员,为了使用这些成员,派生类必须知道他是什么
另一层隐含意思:类不能派生它自己

防止继承的发生

c++11新标准提供一种防止继承发生的方法,即在类名后面紧跟一个关键字final;

0 0
原创粉丝点击