C++中的可视化重写方法
visual Overriding methods in C++
当我重写一个方法时,有时我不小心忘记了在C++中调用超类的方法。
有没有什么方法可以帮助我确定何时用重写方法,这样我就不会忘记调用超类的方法?(类似于Java的@Override
,只是C++没有注释…)
一个建议是非虚拟推理习语。也就是说,使您的公共方法非虚拟,并让它们调用私有或受保护的虚拟方法,派生类可以覆盖这些方法来实现它们的特定行为。
如果你不能控制基类,你可以使用一个中间类:
class Foo // Don't control this one
{
public:
virtual void action();
};
class Bar : public Foo // Intermediate base class
{
public:
virtual void action()
{
doAction();
Foo::action();
}
protected:
virtual void doAction() = 0;
};
从Bar
派生类,并在每个类上覆盖doAction()
。如果需要,您甚至可以拥有doBeforeAction()
和doAfterAction()
。
关于Java的@Override
,在C++11中有一个直接等价物,即override
特殊标识符。
遗憾的是,@Override
和override
都不能解决问题,因为:(a)它们是可选的;(b) 调用基类的方法的责任仍然在于程序员。
此外,我不知道有什么广泛可用的方法可以解决这个问题(这很棘手,特别是考虑到你不一定想调用基类的方法——机器怎么知道?)。
不幸的是,我不知道有什么通用机制可以做到这一点。
在C++中,如果除了添加子功能外,还需要使用基类的功能,则应该查看模板方法模式。这样,公共逻辑总是存在于基类中,不能忘记执行它,并且在子类中只覆盖需要更改的部分。
相关文章:
- 如何强制从重写方法调用重写的方法基方法?
- 具有引用返回类型的重写方法上的协变返回类型无效
- 调用不是来自直系父亲的重写方法
- Qt/C++ - 从派生类调用重写方法
- 重写方法优先 C++
- 为什么重写方法并将 const 添加到参数类型有效
- 如何在向量上调用不同的重写方法
- 处理C++中基类的重写方法的异常
- C重写C++方法
- 如何自动更新重写方法的 *this 返回类型
- 在 c++ 中具有不同返回类型的重写方法
- 未调用继承的重写方法
- 只有当类重写方法时,在动态加载的共享库中实例化的类才会丢失XCode 4.3/4.4 typeinfo
- 在构造函数中使用重写方法的替代方法,Java
- 使用父类型时重写C++方法
- 多个线程中的重写方法
- 关于在强制转换为子类的超类时调用其重写方法
- 如何在所有派生类中调用重写方法
- 返回对"this"的取消引用的重写方法
- C++-从方法基类调用派生类中的重写方法