C++继承构造函数

C++ Inheritance Constructor

本文关键字:构造函数 继承 C++      更新时间:2023-10-16

我正在尝试创建一个哺乳动物对象来调用动物类中的speak函数。我能知道我弄错了哪一部分吗?我是新继承人。

#include <iostream>
#include <string>
using namespace std ;
enum COLOR { Green, Blue, White, Black, Brown } ;
class Animal
{
public :
    Animal() : _name("unknown")
    {
        cout << "constructing Animal object " << _name << endl ;
    }
    Animal (string n , COLOR c)
    {
        cout << "Animal name: " << n << " color: " << c << endl;
    };
    ~Animal()
    {
        cout << "destructing Animal object " << _name << endl ;
    }
    void speak() const
    {
        cout << "Animal speaks " << endl ;
    }
    void move() const { }
private :
    string _name;
    COLOR _color ;
};

class Mammal : public Animal
{
public:
    Mammal (string n, COLOR c) : Animal (n, c)
    {
        cout << "Animal name: " << n << " color: " << c << endl;
    }
    ~Mammal() {}
    void eat() const
    {
        cout << "Mammal eat " << endl ;
    }
};
int main()
{
    Mammal m.speak();
    Animal b("lion", Green);
    cout << "Program exiting …. " << endl ;
    return 0;
}

我不明白为什么我不能创建对象m来调用动物中的说话功能。

您必须拆分此语句

Mammal m.speak();

在两个语句中

Mammal m;
m.speak();

您必须为Mammal类定义默认构造函数。

例如

Mammal() = default;

Mammal() {}

如果有任何用户定义的构造函数,编译器不会为您声明默认构造函数。

Mammal() { }