子类的虚函数和非虚函数的区别

时间:2014-10-28 07:49:11

标签: c++ override

让我的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" ; }  
}

如果在案例2中省略virtualchild中的printx字段,是否有任何区别?

2 个答案:

答案 0 :(得分:5)

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

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

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

使用override,编译器将检查以确保此方法确实覆盖基类中的虚方法。如果没有,编译器将为您生成错误。例如;与原始发布一样,它会获取printxpritnx之间的拼写差异。

答案 1 :(得分:3)

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