让我的parent班级成为;
class parent {
virtual void printx () { cout<< "parent" ; }
}
Run Code Online (Sandbox Code Playgroud)
情况1:
class child : public parent {
virtual void printx() { cout<< " child" ; }
}
Run Code Online (Sandbox Code Playgroud)
案例2:
class child : public parent {
void printx() { cout<< " child" ; }
}
Run Code Online (Sandbox Code Playgroud)
如果我virtual在child类中省略了printx案例2中的函数,有什么区别吗?
如果函数签名相同,child则不需要将类添加virtual到方法中,编译器会为您处理此问题.如果在父类中将函数声明为虚拟,则子项的重写方法也是虚拟的.
如果C++ 11可用,请考虑将子说明override符添加到子类中的重写方法;
class child : public parent {
void printx() override { cout<< " child" ; }
}
Run Code Online (Sandbox Code Playgroud)
使用override,编译器将检查以确保此方法确实覆盖基类中的虚方法.如果没有,编译器将为您生成错误.例如; 与原始帖子一样,它将获取printx和之间的拼写差异pritnx.