假设我有公开派生自基类Dog的类Bulldog和Labrador,并且我有一个函数,例如一个不同类的方法,称为reward,我希望它为Dog和Bulldog类的对象,或者为Bulldog和Labrador类的对象,产生不同的结果。 对于C++开发人员来说,最好的方法是什么?
我明白,如果Dog有任何虚函数,那么我可以为此使用dynamic_cast
。 这是你推荐的东西吗? 如果没有,你认为最好的办法是什么?
直接的方法是使用多态性将奖励(const dog&;dog)
函数(自由函数/其他类)委托给dog
接口的虚拟函数,使用提供的dog
引用,该引用可以多态地分派虚拟dog
方法。 例如:
#include <iostream>
struct Dog {
Dog() {}
virtual ~Dog() {}
virtual void reward() const {
std::cout << "Default dog reward.\n";
}
};
struct Bulldog : public Dog {
Bulldog() {}
~Bulldog() override {}
void reward() const override {
std::cout << "Bulldog reward.\n";
}
};
void reward(const Dog& dog) {
dog.reward();
}
int main() {
reward(Dog{}); // Default dog reward.
reward(Bulldog{}); // Bulldog reward.
return 0;
}