C++中的函数重载和继承
Function overloading and inheritance in C++
>假设我有类斗牛犬和拉布拉多,它们公开派生自基类狗,我有一个函数,例如不同类的方法,称为奖励,我希望它为类狗和斗牛犬的对象或类斗牛犬和拉布拉多的对象产生不同的结果。对于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;
}
相关文章:
- 继承函数的重载解析
- 重载继承的构造函数
- C++中的函数重载和继承
- C++ 继承:基类中重载 operator+ 的 2 次在派生类中无法正常工作
- 如何调用继承的重载运算符<<并在派生类的输出中添加更多文本?
- 类继承和运算符重载
- 通过继承重载运算符会导致歧义
- 使用继承的指针列表复制构造函数或重载运算符=
- 重载<<无法访问继承的私有数据
- C++:涉及继承和"using"时的方法重载
- C++具有多重继承的构造函数重载解析
- c++ 中的函数重载如何在没有钻石继承的情况下工作?
- 函数不参与继承中的重载解析
- 继承类 C++ 中的重载>>
- 模板和unique_ptr继承情况下的重载解决方案
- 如何将同名的继承函数视为重载函数
- 继承重载函数:需要命名空间
- 派生类没有从基类继承重载方法
- c++继承+重载
- c++继承重载成员