C++ 使用 Final 保护 getter/setter

问题描述 投票:0回答:1

假设我有一个类需要一个封装变量来进行条件保护。

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
以保护它免受派生覆盖?
或者我应该假设在正常情况下这不会发生?

顺便说一句,这会增加编译时间还是有一些负面含义?

c++ encapsulation
1个回答
0
投票

只有虚函数可以被子类重写。 因为它在您的代码中,所以子类无论如何都无法覆盖这些函数。

如果您出于某种原因需要它们是虚拟的,那么是的,final 关键字将防止覆盖。

© www.soinside.com 2019 - 2024. All rights reserved.