虛繼承

#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");

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章