避免 C++ 中重复的子类定义

Man*_*nda 1 c++ inheritance header-files

我是 C++ 类的新手,我有一个关于定义具有相同定义的抽象类型/接口的多个子类的问题。

以下面的示例可能出现在具有 3 个子类的头文件中:

class Animal {
private:
    int a;
    int b;
public:
    explicit Animal(int a) {}
    virtual Animal* getFriend() = 0;
    virtual bool walk() = 0;
    virtual bool talk() = 0;
    virtual bool someFunction() = 0;
    virtual bool someOtherFunction() = 0;
    // ... many more functions
}

class Zebra: public Animal {
    Animal* getFriend();
    bool walk();
    bool someFunction();
    bool someOtherFunction();
    // ... continues for many more functions
}

class Cow: public Animal {
    Animal* getFriend();
    bool walk();
    bool someFunction();
    bool someOtherFunction();
    // ... continues for many more functions
}

class Salmon: public Animal {
    Animal* getFriend();
    bool walk();
    bool someFunction();
    bool someOtherFunction();
    // ... continues for many more functions
}

// ... many more animals
Run Code Online (Sandbox Code Playgroud)

像这样声明子类似乎是重复的并且可能容易出错。因为除了类的名称外,类定义是相同的,是否有更有效的方法来批量声明动物子类?

在上下文中,我在每种动物中工作都会在单独的.cpp文件中具有完全独立的实现。

如果我接近这个完全错误,请告诉我。任何帮助将不胜感激。

acr*_*075 5

它是确实容易出错,当你不利用的override关键字为每个虚拟重写类成员函数。

而不是像这样声明派生类函数

bool someFunction();
Run Code Online (Sandbox Code Playgroud)

你可以/应该这样声明

bool someFunction() override;
Run Code Online (Sandbox Code Playgroud)

这样,如果声明与基类签名不匹配,您将收到编译错误。没有它,您将拥有一个非常好的可编译程序,但存在行为错误。

除此之外,您的策略很好,并且是处理抽象函数的方法。