#include <iostream>
using namespace std;
/*
*
* B
* / \
* B1 B2
* \ /
* C
* 图
* 树
*/
/*
class B {
public:
int i;
protected:
private:
};
class B1 : public B {
public:
int b1;
protected:
private:
};
class B2 : public B {
public:
int b2;
protected:
private:
};
class C : public B1 , public B2 {
public:
protected:
private:
};
class Child : public B1, public B2 {
public:
Child() {
cout << "子类" << endl;
}
protected:
private:
};
void main01() {
Child c1;
c1.b1 = 10;
c1.b2 = 20;
// 继承的二义性
//c1.i = 30; //error: C2385 对“i”的访问不明确
c1.B1::i = 40;
c1.B2::i = 50;
cout << "c1.B1::i " << c1.B1::i << endl; // 40
cout << "c1.B2::i " << c1.B2::i << endl; // 50
system("pause");
}
*/
// 解决多继承的二义性,虚继承
class B {
public:
int i;
protected:
private:
};
// 仅仅了解即可
class B1 :virtual public B {
public:
int b1;
protected:
private:
};
class B2 :virtual public B {
public:
int b2;
protected:
private:
};
class C : public B1, public B2 {
public:
protected:
private:
};
class Child : public B1, public B2 {
public:
Child() {
cout << "子类" << endl;
}
protected:
private:
};
void main() {
Child c1;
c1.b1 = 10;
c1.b2 = 20;
// 解决继承的二义性
c1.i = 30;
c1.B1::i = 40;
c1.B2::i = 50;
cout << "c1.B1::i " << c1.B1::i << endl; // 50
cout << "c1.B2::i " << c1.B2::i << endl; // 50
system("pause");
}
C++ 继承的二义性
最新推荐文章于 2023-10-26 03:15:00 发布