Я знаю проблему алмаза и способ ее решения с использованием виртуального базового класса. Я пытался решить проблему с бриллиантом другим способом, но безуспешно. Я не знаю почему.
#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;
}
Поскольку частные члены не наследуются, класс D не наследует никаких функций от C, а когда класс D наследует классы B и C, в D должна быть только 1 функция display(). Но когда я пытаюсь получить доступ к функции display()
, используя объект класс D, он показывает ту же проблему, что функция отображения неоднозначна.