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

标签 c++ inheritance header-files

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

以以下示例为例,该示例可能出现在具有 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

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

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

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

最佳答案

不使用 override 确实容易出错每个重写的虚拟类成员函数的关键字。

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

bool someFunction();

你可以/应该这样声明
bool someFunction() override;

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

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

关于c++ - 避免 C++ 中重复的子类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60256943/

相关文章:

c++ - nullptr 可以用作类型吗?

c++ - 当格式包含非 ASCII 字符时 sprintf 不起作用

c++ - 基类和派生类中的相同数据成员

c++ - 微软示例的这个移动构造函数似乎有冗余代码

java - 从父类(super class)调用方法

java - 我可以在构造函数中传递多个 Super 调用吗?

c - 基本的 C 头文件语法

c - 如何知道头文件里面有什么?

c++ - 如何更改 Eclipse 自动生成的标题注释?

c++ - 多核CPU上32bit读的原子性