我是 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/