Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何访问被覆盖元素的多个级别?_C++_Scope_Multiple Inheritance - Fatal编程技术网

C++ 如何访问被覆盖元素的多个级别?

C++ 如何访问被覆盖元素的多个级别?,c++,scope,multiple-inheritance,C++,Scope,Multiple Inheritance,如何访问基类的基类的重写成员 #include <iostream> using namespace std; class A {public: char x; A(){x='A';};}; class B1 : public A {public: char x; B1(){x='B';};}; class B2 : public A {public: char x; B2(){x='B';};}; class C : public B1, public B2 {public: c

如何访问基类的基类的重写成员

#include <iostream>
using namespace std;

class A {public: char x; A(){x='A';};};
class B1 : public A {public: char x; B1(){x='B';};};
class B2 : public A {public: char x; B2(){x='B';};};
class C : public B1, public B2 {public: char x; C(){x='C';};};

int main(){
    C c;
    cout << c.x << endl; // prints C

    cout << c.B1::x << endl; // prints B
    cout << ((B1&) c).x << endl; // prints B

    // cout << c.A::x << endl; // normally prints A but doesn't work here
    cout << ((A&) c).x << endl; // prints A
    return 0;
}
#包括
使用名称空间std;
类A{public:char x;A(){x='A';};};
类B1:public A{public:char x;B1(){x='B';};};
类B2:public A{public:char x;B2(){x='B';};};
类C:publicB1,publicB2{public:char x;C(){x='C';};};
int main(){
C C;

cout您可以访问两个版本的via引用强制转换和作用域操作符,如下所示:
((B1&)c).A::x
((B2&)c).A::x


cout它不会工作,编译器应该告诉你原因。至少我的是:-):“C的模棱两可的基础”。答案是虚拟继承

#include <iostream>
using namespace std;

class A {public: char x; A(){x='A';};};
class B1 : public virtual A {public: char x; B1(){x='B';};};
class B2 : public virtual A {public: char x; B2(){x='B';};};
class C : public B1, public B2 {public: char x; C(){x='C';};};

int main(){
    C c;
    cout << c.x << endl; // prints C

    cout << c.B1::x << endl; // prints B
    cout << ((B1&) c).x << endl; // prints B

    cout << c.A::x << endl; // normally prints A but doesn't work here
    //cout << ((A&) c).x << endl; // prints A
    return 0;
}
#包括
使用名称空间std;
类A{public:char x;A(){x='A';};};
B1类:公共虚拟A{public:char x;B1(){x='B';};};
类B2:公共虚拟A{public:char x;B2(){x='B';};};
类C:publicB1,publicB2{public:char x;C(){x='C';};};
int main(){
C C;

是的,好吧…多重继承的问题出现了…我以为它可以通过多重继承来简化,但事实上,问题消失了。thx指出:-)-op editedGood-结合引用强制转换和scope op似乎解决了所有问题。如果没有人提出另一个问题,我会接受lem…我想把每个B都分开。不管怎样,THX。你在问题中没有具体说明。我可以问你为什么要把它们分开吗?事实上是的!我想我应该更仔细地阅读这个问题。没关系-我可以凭空编出一个例子。但这个问题是从理论角度提出的。
#include <iostream>
using namespace std;

class A {public: char x; A(){x='A';};};
class B1 : public virtual A {public: char x; B1(){x='B';};};
class B2 : public virtual A {public: char x; B2(){x='B';};};
class C : public B1, public B2 {public: char x; C(){x='C';};};

int main(){
    C c;
    cout << c.x << endl; // prints C

    cout << c.B1::x << endl; // prints B
    cout << ((B1&) c).x << endl; // prints B

    cout << c.A::x << endl; // normally prints A but doesn't work here
    //cout << ((A&) c).x << endl; // prints A
    return 0;
}