C++ 派生类是否可以具有不在C+;中基类中的构造函数+;?
假设我有一个基类:C++ 派生类是否可以具有不在C+;中基类中的构造函数+;?,c++,class,oop,inheritance,C++,Class,Oop,Inheritance,假设我有一个基类: class Animal { public: Animal(double length, double height); virtual ~Animal(); private: fLength; fHeight; }; 构造函数设置fLength=length和fHeight=height 我有一个派生类Fish,它工作得很好 但是假设我有一个派生类Cat,它有另一个属性fLegs,需要在构造函数中设置。鱼没有腿,因此动物基类具有属性f
class Animal
{
public:
Animal(double length, double height);
virtual ~Animal();
private:
fLength;
fHeight;
};
构造函数设置fLength=length
和fHeight=height
我有一个派生类Fish
,它工作得很好
但是假设我有一个派生类Cat
,它有另一个属性fLegs
,需要在构造函数中设置。鱼没有腿,因此动物基类具有属性fLegs
是没有意义的
是否可以创建Cat的构造函数,如:
Cat(双倍长度、双倍高度、双腿)
我已经试过了,但是出现了一个错误,说没有匹配的函数调用给Animal
有什么方法可以绕过这个问题,而不必使鱼具有fLegs属性并将鱼的属性设置为0?是的
例如:
class Animal
{
public:
Animal(double length, double height) : fLength(length), fHeight(height) {}
virtual ~Animal(){};
private:
double fLength;
double fHeight;
};
class Cat : public Animal
{
public:
Cat(double length, double height, double Legs) : Animal(length, height), fLegs(Legs) {}
private:
double fLegs;
};
int main(void)
{
Cat(1,2,4);
return 0;
}
您可以使用下面的代码。首先初始化基类构造函数。然后是派生类变量
class Cat : public Animal
{
public:
Cat(double length, double height, double legs) : Animal(length, height), fLength(legs)
{
}
private:
double flegs;
};
面向对象编程不应该这样工作。不要认为它是一种组合属性的方法。可以把它看作是为不同的操作定义一个公共接口。在这种情况下,请考虑您的程序需要支持的所有动物通用的操作,例如
virtual void MakeNoise()
。您好,我在动物类中也有由派生类继承的通用方法。类中应该包含哪些数据成员取决于这些类如何实现虚拟函数。基类通常根本没有任何数据成员。但我需要在构造函数中设置数据成员,所有动物都有长度和高度,所以这是有意义的。正如我所说,面向对象编程不是关于动物拥有什么,而是关于它们做什么。再想一想,答案更新了!好问题@Oceansion,+1;)非常感谢,所以这不是一个坏做法吗?不,派生类拥有更多基类的数据成员是有意义的!;)我就是这么想的!这和我的答案有什么不同当我回答说你的答案不可见时。在我发布答案后,我看到了你的答案,。和平:D