2014-10-28 66 views
2

让我的parent班是;儿童班的虚拟和非虚拟功能的区别

class parent { 
    virtual void printx() { cout<< "parent" ; } 
} 

案例1:

class child : public parent { 
    virtual void printx() { cout<< " child" ; } 
} 

案例2:

class child : public parent { 
    void printx() { cout<< " child" ; } 
} 

有什么区别,如果我在child类功能printx的情况下,2省略virtual

回答

5

如果函数签名相同,则child类不需要将virtual添加到方法中,编译器会为您处理此问题。 如果函数在父类中被声明为虚拟的,那么子类的重写方法也是虚拟的。

如果C++ 11可用,请考虑将override specifier添加到子类中的重写方法;

class child : public parent { 
    void printx() override { cout<< " child" ; } 
} 

随着override,编译器会检查,以确保该方法确实重写基类中的虚方法。如果没有,编译器会为你生成一个错误。例如;如在原始发布中那样,它将拾取printxpritnx之间的拼写差异。

+3

+1重要的是......这会引起人们注意'printx'和'pritnx'不同...... – 2014-10-28 08:00:43

3

两者都是相同的。如果一个函数在基类中被声明为虚拟的,那么无论你是否明确提及它,它在所有派生类中都是虚拟的。