class MyInterface {
public:
virtual void someFunction()= 0;
};
class X: public MyInterface {
private:
virtual void doThis() {
printf("This X");
}
virtual void doThat() {
printf("That X");
}
public:
void someFunction() {
doThis();
doThat();
}
};
class Y: public MyInterface, private X {
private:
void doThat() {
printf("That Y");
}
};
MyInterface *iface= new Y();
Y->someFunction();
Исходя из аромата ООП Java
, я пытаюсь обернуть голову вокруг модели ООП C ++.Я прочитал это: http://www.gotw.ca/publications/mill18.htm для предложений о том, как проектировать интерфейсы в C ++.Приведенный выше код является прямым применением (или небольшим изменением) правила, изложенного автором.Мой вопрос заключается в том, собирается ли приведенный выше код создать «This X» с последующим «That Y»?Что меня смущает, так это то, что автор рекомендует использовать virtual
в сочетании с private
.Я рассуждаю так: если функция private
, как нам вообще ее переопределить?В приведенном выше коде предоставлено, что Y
может использоваться в качестве правой части присваивания, так как мы открыто выводим данные из интерфейса.Когда мы вызываем someFunction()
для него, так как мы не предоставляем явно реализацию внутри class Y
, будет ли она использовать реализацию из class X
?Затем, при условии, что он просматривает doThat()
и снова использует Y
s его реализацию?