【发布时间】:2019-09-20 06:43:31
【问题描述】:
我有以下示例。请注意,这只是说明问题的示例。实际情况要复杂得多。
问题是我必须重载 base 类的函数。如果计算中使用的对象是 base 类型,则它使用变量 x,这对于基类和派生类都是通用的。如果对象属于 派生 类,则它使用其特定的变量 y。所以真正的问题是如何在定义类基之前定义派生类。
我知道该问题的两种解决方法,但都不是解决方案:
- 使类派生基本类和继承的松散好处
- 将函数计算更改为
calculate(double y) {return x+y;)什么意思像解决方案但不是由于问题很复杂。只是我需要访问对象的其余部分。
class base {
protected:
double x;
public:
double calculate(base b) {return x+b.x;}
double calculate(derived d) {return x+d.y;}
}
class derived: base {
public:
double y;
这个问题可以解决吗?
提前谢谢...
【问题讨论】:
-
你应该使用虚函数而不是重载。您正在寻找错误的解决方案。
-
基类知道其任何派生类是您应该重新设计的重要指标。
标签: c++ oop inheritance overloading