【发布时间】:2013-12-18 09:21:48
【问题描述】:
我有一个抽象类Figure 和一些派生类:Circle、Square、...
类图实现:
private:
virtual double varea()=0;
double multiplier;
public:
virtual Figure * clone()=0;
double area() { return varea()*multiplier; }
数字,例如 Square,表现如下:
private:
double L;
public:
virtual Figure * clone() {return new Square(*this);}
virtual double varea() {return L*L;}
在调用方法克隆时,我很难分配变量乘数。实现这一目标的最佳方法是什么?当然这只是一个愚蠢的例子,有许多变通方法,但实际上,有多个推导层次,它们并不那么明显,所以请坚持这种模式。
我是否应该为方法克隆也使用虚拟接口?这样我就可以直接在 Figure 类中分配乘数,而不需要让每个图形知道它的乘数。
【问题讨论】:
-
multiplier 是私有的,所以你要么需要一个受保护的 setter,要么需要一个将 multiplier 作为参数的构造函数。子类构造函数然后可以将乘数值传递给父构造函数。
-
@Thrustmaster 我希望能够避免编辑所有现有的派生图形,并为我仍然需要编写的那些保留轻型构造函数。确实没有其他理由让数字看到其乘数。
标签: c++ clone virtual member non-virtual-interface