gpt4 book ai didi

c++ - 标记仅用于覆盖的函数的正确方法是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 01:36:34 24 4
gpt4 key购买 nike

我有一个类旨在按原样使用或由第 3 方软件继承。它有一个函数 Resize ,对于毫无戒心的开发人员来说,它可能看起来很有吸引力且简单明了,但它只能从一个内部位置调用,并且需要事先进行特殊准备。

它是一个单独的函数的唯一原因是因为它是虚拟的并且在第 3 方继承的类需要在此函数的内容之前和之后做事情时被覆盖。

有什么方法可以标记它仅在覆盖时可用吗?所以你真的不能去 MyClass.Resize() 吗?

最佳答案

很少有选项可以提供这种级别的控制。最简单的是提供 protected 虚拟成员(member);

class MyClass {
protected:
virtual void Resize(); /* =0*/
};

根据您的要求,您可能希望将其设为纯虚函数以强制派生类覆盖该函数(注意;您仍然可以提供该函数的实现,即使它是纯函数,派生类需要显式调用它以获得默认功能)。

另一种方法是在调用 Resize 方法之前和之后提供两个需要在基类中重写的函数,即 template method pattern。 .此模式还在标准 iostreams 库中用于 sync() 等方法。

关于c++ - 标记仅用于覆盖的函数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416851/

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