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文件中具有完全独立的实现。
如果我接近这个完全错误,请告诉我。任何帮助将不胜感激。
它是确实容易出错,当你不利用的override关键字为每个虚拟重写类成员函数。
而不是像这样声明派生类函数
bool someFunction();
Run Code Online (Sandbox Code Playgroud)
你可以/应该这样声明
bool someFunction() override;
Run Code Online (Sandbox Code Playgroud)
这样,如果声明与基类签名不匹配,您将收到编译错误。没有它,您将拥有一个非常好的可编译程序,但存在行为错误。
除此之外,您的策略很好,并且是处理抽象函数的方法。