【发布时间】:2017-11-01 12:50:39
【问题描述】:
我有一个名为transform 的类及其子类translation、rotation 和scaling,它们应该对三角形应用变换。
每个子类都覆盖apply_transform() 方法:
class transform
{
protected:
virtual triangle apply_transform(const triangle&) const = 0;
public:
static triangle apply_transforms(const triangle&, const std::initializer_list<const transform*>&);
};
class scaling : public transform
{
...
public:
triangle apply_transform(const triangle&) const override;
};
//same for rotation and translation
我还有一个叫做apply_transforms的函数,它应该可以被外界访问,我用它来应用多个转换。我将transform* 的列表传递给它以启用多态性。
我唯一的问题是,现在子类也知道这种方法。这让我很困扰,因为子类不应该能够应用所有其他转换。
有没有一个优雅的解决方案?
【问题讨论】:
-
好吧,您要么拥有对外界可见的函数(包括派生类),要么将其隐藏给所有人。
-
apply_transforms 可以在三角形类上是公共静态的吗?
-
我建议您不要再为此烦恼了。是不是我这个跟几何无关的字符串类也可以访问这个函数?
标签: c++ oop inheritance polymorphism information-hiding