我有一个来自基类(A类)的派生类(B类)。 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();
是一样的。
答案 0 :(得分:1)
他们不一样。在第一个示例中,B
是-an - 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.
答案 1 :(得分:0)
不,你的两个案子不一样。
在第二种情况下,class B
无法转换为class A
,因为隐藏了私有基类。在这方面会得到与class A
成为class B
成员时相同的行为。
答案 2 :(得分:0)
两者都不相同 在公共继承类A中,foo()将成为B类中的受保护成员 在私有继承中,类B只能访问类A的公共成员,因此在类B中不会出现类A的任何foo()。