我一直在练习继承,我发现自己在问真正的“拥有”关系。
如果我有一个类circleType
,并且要创建一个类cylinderType
,那么从cylinderType
派生circleType
和在circleType
的定义中仅包含一个cylinderType
对象成员之间有什么区别?
class cylinderType :
public circleType
{
public:
cylinderType();
~cylinderType();
private:
double * height;
};
要么:
class cylinderType
{
public:
cylinderType();
~cylinderType();
private:
circleType baseOfCylinder;
};
最佳答案
当is-a关系不成立时,建议使用组合而不是继承。在这种情况下,圆柱不是圆的类型,因此(公共)继承是不合适的。
请记住,从另一个类公开继承的一个类可以在可以使用父级的任何地方使用。例如,给定OP中的定义,以下内容完全有效,即使计算圆柱体的面积并没有太大意义:
double area(const circleType& circle)
{
return PI * circle.radius() * circle.radius();
}
int main()
{
cylinderType cylinder;
std::cout << area(cylinder);
}