您的位置:首页 > 其它

虚继承

2016-02-23 18:41 369 查看
#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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: