atp*_*atp 10 c++ virtual inheritance
如果我有C++:
class A {
private: virtual int myfunction(void) {return 1;}
}
class B: public A {
private: virtual int myfunction(void) {return 2;}
}
Run Code Online (Sandbox Code Playgroud)
然后,如果我virtual
从myfunction
定义中删除class B
,这是否意味着如果我有一个class C
基础class B
,我不能覆盖,myfunction
因为它将静态编译?
另外,我很困惑当你在公共场所切换时会发生什么,而在这里私密.如果我将myfunction
in 的定义更改class B
为public(并且class A
保持私有),这是否是我不应该做的某种严重错误?我认为虚拟功能需要保持相同的类型,这是非法的,但请告诉我是否错了.
谢谢!
小智 18
"虚拟"的第一个定义是重要的.从基础开始的那个函数从那时开始就是虚拟的,这意味着你不需要'virtual'来重新实现虚函数调用.如果基类中的函数签名不是虚拟的,而是在派生类中是虚拟的,则基类不具有多态行为.
class Base
{
public:
void func(void){ printf("foo\n"); }
};
class Derived1 : public Base
{
public:
virtual void func(){ printf("bar\n"); }
};
class Derived2 : public Derived1
{
public:
/* reimplement func(), no need for 'virtual' keyword
because Derived1::func is already virtual */
void func(){ printf("baz\n"); }
};
int main()
{
Base* b = new Derived1;
Derived1* d = new Derived2;
b->func(); //prints foo - not polymorphic
d->func(); //prints baz - polymorphic
}
Run Code Online (Sandbox Code Playgroud)