虚继承

#include "iostream"

using namespace std;

 

class base

{

public:

int k;

void printI()

{

//cout<<i<<endl;

}

protected:

private:

};

class base1 : virtual public base

{

public:

int i;

void printI()

{

cout<<i<<endl;

}

protected:

private:

};

class base2 : virtual public base

{

public:

int j;

void printJ()

{

cout<<j<<endl;

}

protected:

private:

};

class  C : public base1, public base2

{

public:

protected:

private:

};

void main()

{

C c1;

c1.k = 100;  //如果不加virtual会提示访问不明确virtual的目的是使公共基类在众多派生类中只产生一个子对象

system("pause");

}

多继承:1多层继承(爷父孙) 2继承多个

虚继承这种方法一般不使用!!!

而是使用纯虚函数虚函数实现多继承(接口作用)

多继承的工程应用场景

#include "iostream"

using namespace std;

 

/*

C++中没有接口的概念

C++中可以使用纯虚函数实现接口

接口类中只有函数原型定义,没有任何数据的定义。

 

*/

 

class Interface1

{

public:

virtual void print() = 0;

virtual int add(int i, int j) = 0;

};

 

class Interface2

{

public:

virtual int add(int i, int j) = 0;

virtual int minus(int i, int j) = 0;

};

 

class parent

{

public:

int i,j;

};

class Child : public parent, public Interface1, public Interface2

{

public:  

void print()

{

cout<<"Child::print"<<endl;

}

int add(int i, int j)

{

return i + j;

}

 

int minus(int i, int j)

{

return i - j;

}

};

int main()

{

Child c;

c.print();

cout<<c.add(3, 5)<<endl;

cout<<c.minus(4, 6)<<endl;

 

Interface1* i1 = &c;

Interface2* i2 = &c;

 

cout<<i1->add(7, 8)<<endl;

cout<<i2->add(5,6)<<endl;

system("pause");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值