派生类是否有一个不在C ++基类中的构造函数?

时间:2017-12-02 17:01:45

标签: c++ class oop inheritance

说我有一个基类:

class Animal
{
public:
    Animal(double length, double height); 
    virtual ~Animal(); 

private:
    fLength;
    fHeight;
};

构造函数设置fLength = lengthfHeight = height

我有一个派生类Fish可以正常工作。

但是说我有一个派生类Cat,它有另一个需要在构造函数中设置的属性fLegs。鱼没有腿,因此动物基类具有属性fLegs是没有意义的。

Cat的构造函数是否可以像:

一样创建

Cat(double length, double height, double Legs)

我试过这个,但是出现错误,说没有匹配的函数调用Animal。

有没有什么办法可以解决这个问题,而不会让Fish有fLegs属性并为Fish设置为0?

2 个答案:

答案 0 :(得分:1)

示例:

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;
}

答案 1 :(得分:0)

您可以使用以下代码。首先初始化基类构造函数。然后派生类变量。

class Cat : public Animal
{
public:
    Cat(double length, double height, double legs) : Animal(length, height), fLength(legs)
    {
    } 

private:
   double flegs;
};