gpt4 book ai didi

c++ - C++ 'final' 方法注释对类设计有何 promise ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:22 26 4
gpt4 key购买 nike

从语言的角度来看,我知道 C++(自 C++11 起)中的 final 方法注释的作用。

class Base {
virtual void method();
};
class Locked : public Base {
virtual void method() final;
};

任何派生自 Locked 的类都不能再覆盖 method

但是从 OOP 的角度来看,它对 API 和契约(Contract)有什么看法?正如已经要求的Java , 作为Locked的类作者,关于现在整个类的设计,我必须注意什么,我 promise 什么?

例如:我可以想象,通过使用 final 注释,我是在说“这个方法的行为不会改变”。但是,如果我在 method() 中调用其他方法怎么办?如果它们可以被覆盖,我怎么能保证呢?那么,严格来说,从 OOP 的角度来看,用 final 注释是否意味着我不能在该方法中使用其他可重写的方法?还是其他设计限制?

最佳答案

通常,您应该使用 final 关键字来确保用户不会出于安全原因或任何其他要求将类函数限制为最终函数而发生此函数的覆盖行为。

如果您正在使用任何其他方法,它们也应该被标记为最终的,除非例如它们操作的字段是私有(private)的(您可以想象一些默认行为修改私有(private)字段但您可以允许覆盖函数做的场景还有其他东西)。

关键字本身仅限制要覆盖的函数,它不会神奇地知道函数不随扩展基类而改变的真正含义。

#include <iostream>
using namespace std;

class foo{
public:
virtual int bar() final{
foobar();
}

virtual void foobar(){cout << "blah";}
};

class baz : public foo{
public:
void foobar() override {
cout << " not blah";
}
};

int main(){
baz * a = new baz();
a->bar();
}

例如这段代码将打印“not Blah”

关于c++ - C++ 'final' 方法注释对类设计有何 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25443381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com