对象成员变量还是继承?

时间:2018-07-18 19:44:20

标签: c++ oop inheritance polymorphism

我一直在练习继承,我发现自己在问什么是真正的“拥有”关系。

如果我有一个类circleType,并且想创建一个类cylinderType,那么从cylinderType导出circleType到只包含一个{{1}之间的区别是什么? } circleType

中的对象成员
cylinderType

OR:

class cylinderType :
public circleType
{
public:
    cylinderType();
    ~cylinderType();

private:
    double * height;
};

1 个答案:

答案 0 :(得分:6)

在不存在is-a关系时,建议使用组合而不是继承。在这种情况下,圆柱不是圆的类型,因此(公共)继承不合适。

请记住,可以从任何可以使用父级的地方使用从另一个类公开继承的类。例如,给定OP中的定义,以下内容完全有效,即使计算圆柱体的面积并没有太大意义:

double area(const circleType& circle)
{
    return PI * circle.radius() * circle.radius();
}

int main()
{
    cylinderType cylinder;
    std::cout << area(cylinder);
}