我可以报告子类值,其中子类存储在 std::vector <parent-class>中
Ho can I report sub-class values where sub-classes are stored in a std::vector<parent-class>
我有一个指向父类动物的智能指针的std::向量。
std::vector<std::shared_ptr<animal>> farm;
猫、狗和老鼠的子类都有父类动物。矢量中只指向猫、狗和老鼠。像这个
class cat : public animal {
public:
bool claws;
};
farm.push_back(std::make_shared<cat>());
farm.push_back(std::make_shared<dog>());
farm.push_back(std::make_shared<mouse>());
Cat还有公共成员Cat.claws(类型为bool)。
我知道农场[0]。爪子不会工作,因为爪子不是农场的虚拟成员。有没有一种方法可以在不创建单独虚拟功能的情况下在农场中循环时访问爪子?在实际的问题中,我有许多不同的子类变量,当程序在农场上循环时(无限期),我想向用户报告。
您可以为此使用dynamic_cast
或std::dynamic_pointer_cast
,例如:
if(auto catPtr = std::dynamic_pointer_cast<cat>(animalPtr))
{
// now you use catPtr.claws
}
(假设animalPtr是std::shared_ptr<animal>
类型)
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 使用子类覆盖基类中定义的函数
- 我可以报告子类值,其中子类存储在 std::vector <parent-class>中
- 如何通过 std::vector 子类的重载赋值运算符进行深度复制<T>?
- 在c++中推回基类类型2d vector中的子类对象
- 如何创建支持initializer_list的std::vector子类
- 从vector的超类调用子类方法
- 在vector中存储不同的子类
- 使用auto循环vector时使用子类成员
- 为什么string不是vector的(子类)?