C++中的函数重载和继承

Function overloading and inheritance in C++

本文关键字:继承 重载 函数 C++      更新时间:2023-10-16

>假设我有类斗牛犬和拉布拉多,它们公开派生自基类狗,我有一个函数,例如不同类的方法,称为奖励,我希望它为类狗和斗牛犬的对象或类斗牛犬和拉布拉多的对象产生不同的结果。对于C++开发人员来说,执行此操作的最佳方法是什么?

我知道如果 Dog 有任何虚拟功能,那么我可以使用dynamic_cast来实现此目的。这是你会推荐的吗?如果没有,您认为最好的方法是什么?

直接的方法是使用多态性将reward(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;
}