c++ - C++中的函数重载和继承
问题描述
假设我有公开派生自基类 Dog 的 Bulldog 和 Labrador 类,并且我有一个函数,例如不同类的方法,称为奖励,我希望它为 Dog 和 Bulldog 类的对象或为Bulldog 和 Labrador 类的对象。对于 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;
}
推荐阅读
- java - 2 个类,1 个 Java 中的 Junit 测试错误。错误信息
- python - 在 Pandas 中用 0(零)填充缺失的日期
- azure - 如何在 azuredeploy 中使用选项和设置
- angular - Angular:如何以编程方式将 Base64 图像设置为 div 的背景图像
- java - 如何在发送之前在 HTML 文件中实现 Java 变量?
- batch-file - 将此批处理变量保存到 txt 文件中
- python - 有效地比较当月的运行总计和当月的总计
- selenium - Jenkins 中的 TestNG 结果趋势不显示失败的测试或构建
- tensorflow - 为什么归一化不需要参数,但批量归一化需要
- python - 每当将新对象放入 Azure 存储桶时触发 Azure Runbook