changkun / modern-cpp-tutorial

📚 Modern C++ Tutorial: C++11/14/17/20 On the Fly | https://changkun.de/modern-cpp/
https://changkun.de/modern-cpp/
MIT License
23.86k stars 2.98k forks source link

2.6章节-显式虚虚函数重载-final禁止子类重载 的示例容易产生误解 #293

Closed cctyl closed 3 months ago

cctyl commented 3 months ago

动机

2.6章节-显式虚虚函数重载-final禁止子类重载 中,示例是:

struct Base {
    virtual void foo() final;
};
struct SubClass1 final: Base {
}; // 合法

struct SubClass2 : SubClass1 {
}; // 非法, SubClass1 已 final

这会让初学者以为,final必须在父类SubClass1 也继承了一个父类Base ,这种情况下使用final,才能让SubClass2 不能继承SubClass1 。 实际情况是,不管SubClass1 是否继承Base ,都可以使用final

需求说明

建议,示例改成:

struct SubClass1 final {
}; 

struct SubClass2 : SubClass1 {
}; // 非法, SubClass1 已 final
frederick-vs-ja commented 3 months ago

我觉得多加一个例子好一点。

cctyl commented 3 months ago

这个书缺漏比较多,没啥必要补充了,关闭