C++中override说明符无需virtual?override是否隐含virtual?
C++中override关键字与虚函数的关系解答
关键结论
派生类中带override标记的成员函数,自动继承基类对应函数的virtual属性,就算不写virtual也依然是虚函数,这是C++标准明确规定的行为。
1. 为什么void B::method() override;能正常编译?
基类A的method已经是虚函数,当派生类B的函数加上override时,编译器会验证它是否确实重写了基类的虚函数,同时自动将该函数标记为虚函数。override的核心作用是语法检查——确保你写的函数真的是在重写基类的虚函数,而不是不小心定义了同名的新函数。只要基类有匹配的虚函数,这种写法就完全合法,编译器不会报错。
2. 两种写法的区别?
void method() override;:这是简洁的标准写法,函数通过重写基类虚函数自动成为虚函数,无需重复写virtual。virtual void method() override;:显式标注了virtual,功能上和上面完全一致,只是多了一个冗余的关键字。编译器处理时两者没有任何区别,生成的代码也完全相同。
显式写virtual只是让代码的意图更直观(一眼就能看出是虚函数),但从语法和实际运行效果来看,两种写法等价。
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

