让我的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中省略virtual
类child
中的printx
字段,是否有任何区别?
答案 0 :(得分:5)
如果函数签名相同,则child
类不需要将virtual
添加到方法中,编译器将为您处理此问题。 如果在父类中将函数声明为虚拟,则子项的重写方法也是虚拟的。
如果C ++ 11可用,请考虑将override
specifier添加到子类中的重写方法中;
class child : public parent {
void printx() override { cout<< " child" ; }
}
使用override
,编译器将检查以确保此方法确实覆盖基类中的虚方法。如果没有,编译器将为您生成错误。例如;与原始发布一样,它会获取printx
和pritnx
之间的拼写差异。
答案 1 :(得分:3)
两者都是一样的。如果函数在基类中声明为虚函数,那么无论您是否明确提及它,它都将在所有派生类中都是虚拟的。