面向对象编程中,接口如何解决圆-椭圆问题?
接口无法解决面向对象中的圆-椭圆问题?
有人认为接口能解决面向对象编程中的若干问题,尤其是圆-椭圆问题。比如可以定义如下接口:
class IEllipse { public: virtual double GetXRadius() const = 0; virtual double GetYRadius() const = 0; virtual void SetXRadius(double r) = 0; virtual void SetYRadius(double r) = 0; };
但仍存在类似如下的问题函数:它适用于IEllipse的部分实现,但不适用于圆的实现(圆的实现会把SetXRadius和SetYRadius都关联到同一个存储变量radius):
std::string SerializeDestructively(IEllipse& ellipse) { std::stringstream s; s << ellipse.GetXRadius() << " "; ellipse.SetXRadius(0.0); s << ellipse.GetYRadius(); ellipse.SetYRadius(0.0); return s.str(); }
问题的根源在于,IEllipse代表的是可在各维度调整大小的椭圆,而圆根本无法实现这个接口——因为圆被修改后就不再是圆了,仅通过定义椭圆接口并不能解决该问题。
内容的提问来源于stack exchange,提问作者V. Semeria
相关产品推荐
相关产品推荐

