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