0630第五讲继承(4)抽象基类、纯虚函数、多继承

0630第五讲继承(4)抽象基类、纯虚函数、多继承
1、抽象基类与纯虚函数
1.1抽象基类:如果包含纯虚函数、此类是一个抽象类,因为抽象类不能实例化对象,只能用做基类使用->(抽象基类)
1.2纯虚函数:函数声明时=0,此函数是一个纯虚函数。
(纯虚函数被定义在派生类中。如果派生类不重写基类的纯虚函数,则将纯虚函数继承为派生类的纯虚函数。因此,派生类也是一个抽象类。)

2、多继承
2.1多继承:一个子类有两个或者两个以上的父类
父类构造函数的执行顺序时根据继承顺序来的
2.2主要存在问题:
多继承问题1:父类构造函数执行顺序:根据继承顺序来执行
多继承问题2:多个父类中同名函数区分:类型::来区分同名函数
多继承问题3:菱形继承问题(孙子类中出现多份爷爷类中的成员)
使用virtual继承(孙子类直接从爷爷类继承成员,再分别继承父类中各自扩展的成员)
孙子类构造函数:先调用‘爷爷’类构造函数,再各个调用父类构造函数,最后构造‘孙子’类扩展成员

class R{
protected:
    int r;
public:
    R(int _r):r(_r){

    }
    void print(){
        cout<<"r = "<<r<<endl;
    }
};
class A:virtual public R{
protected:
    int a;
public:
    A(int _r,int _a):R(_r),a(_a){
    }

};
class B:public  virtual R {
protected:
    int b;
public:
    B(int _r,int _b):R(_r),b(_b){
    }
};
class C:public A,public B{
public:
   // C(int _r,int _a,int _b):A(_r,_a),B(_r,_b){}//正常继承构造函数
    C(int _r,int _a,int _b):R(_r),A(_r,_a),B(_r,_b){}// 虚继承构造函数
};
int main(int argc, const char * argv[]) {
    C c(1,2,3);
    c.print();
    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值