c++ - 以不同的方式,C++ 克服了钻石的模糊性

  显示原文与译文双语对照的内容

我知道使用虚拟基类解决钻石问题和方法的方法。 我试图用另一种方法解决钻石问题,但没有成功。 我不清楚为什么。


#include <iostream>



using namespace std;


class A


{


 public:


 void display()


 {


 cout <<"successfully printed";


 }


};



class B: public A


{



};



class C: private A//display() of A will become private member of C


{



};



class D: public B, public C//private member display() of C should not be inherited


{



};



int main()


{


 D d;


 d.display();


 return 0;


}



当 private 成员不继承时,D 类不会继承C的任何函数,当D 类继承B 和C 时,应该只有 1 display() 函数。 但是当我试图使用D 类的对象访问 display() 函数时,显示了显示函数不明确的问题。

时间: 原作者:

"private 成员are是一个 false 前提,这不是 Java 。

在 C++ 中,成员访问的设计方式是,如果你替换任何 private: 使用 public:,程序的行为不会改变。

由于这个原因,在 here compiler编译器遇到名称"显示"时出现的名称查找,首先在 d.display(), 中找到所有成员函数,然后在中查找 best,因为成员访问规则是不可访问的。

原作者:
...