假设我有一个类需要一个封装变量来进行条件保护。
class person {
private:
int height_;
public:
explicit person(int height) {
this->height_ = height;
}
int get_height() const noexcept {
return height_;
}
void set_height(int height) {
if (height < 0)
throw std::invalid_argument("Height cannot be negative");
this->height_ = height;
}
};
我意识到我可以将 height 设为无符号整数,但这是许多可能问题的一个示例。
我的
set_height
是否应该标记为 virtual
... final
以保护它免受派生覆盖?顺便说一句,这会增加编译时间还是有一些负面含义?
只有虚函数可以被子类重写。 因为它在您的代码中,所以子类无论如何都无法覆盖这些函数。
如果您出于某种原因需要它们是虚拟的,那么是的,final 关键字将防止覆盖。