У меня есть производный класс (класс B) из базового класса (класс A). Класс A имеет защищенную виртуальную функцию foo (), которую я хочу переопределить и использовать в качестве частного в производном классе.
Class A{
protected:
virtual void foo() = 0;
}
Мне интересно ли следующее
Class B: public Class A
private:
virtual void foo();
а также
Class B: private Class A
private:
virtual void foo();
подобные.
Они не то же самое. В первом примере B
является—A
во втором это не так. Так что в первом случае вы можете иметь такой код, как
void foo(const A& a);
который принимает A
а также B
в качестве аргументов. С частным наследством вы не могли этого сделать. Например,
A a;
B b;
foo(a); // OK with private and public inheritance
foo(b); // OK only with public inheritance, i.e. B is an A.
Нет, ваши два случая не совпадают.
Во втором случае class B
не может быть приведен к class A
потому что частный базовый класс скрыт. в этом аспекте получит такое же поведение, как если бы class A
будет членом class B
,
Нет оба не одинаковые
В публичном наследовании класса A функция foo () будет защищенным членом класса B
В частном наследовании класс B может получить доступ только к открытым членам класса A, поэтому в классе B. не будет представлено ни одного foo () класса A.