C++虚函数实现?

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)

然后,如果我virtualmyfunction定义中删除class B,这是否意味着如果我有一个class C基础class B,我不能覆盖,myfunction因为它将静态编译?

另外,我很困惑当你在公共场所切换时会发生什么,而在这里私密.如果我将myfunctionin 的定义更改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)


Chr*_*ski 7

一旦函数在基类中变为虚拟,它将对于每个其他子类都是虚拟的.

public,protected和private不会影响函数的虚拟性.