![](/img/trans.png)
[英]common function in base and derived calling base when called through another base function using a derived object?
[英]How to warn (or error) when calling a function that is only implemented in base but not derived?
我真的不确定如何简要地给这个问题命名。
情况:
Base
作为接口,它指定了我们拥有的所有特性(成员函数)。 还有多个派生类可以实现功能的子集。 这些函数是虚函数。Derived
中是否存在 function。要求:
也许解决方案(不完美):
实现Base
中的每个功能并在内部抛出错误。 在Derived
中使用using
并将 function 放在私有字段中。 缺点。 如果有新功能,我们需要将其添加到每个 class。如果我们忘记这样做,则没有警告。
在Base
中使用纯虚函数,并在每个Derived
中为每个特性实现它们。 缺点: Derived
不需要的那些功能的许多实现(和代码),并且实现都是相同的 - 抛出错误。
更新:
对于 11.:通过“很多实现”,我做了一个例子: https://godbolt.org/z/sW8eKjbhx 。
您可以将此 function 标记为纯虚拟。 然后它必须在派生类中被覆盖。 它仍然可以有身体。
class Base {
public:
virtual void f() = 0;
};
void Base::f() {
// ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.