通过基类指针获取派生类对象的引用

时间:2019-10-27 00:20:06

标签: c++ class

我有一个基类指针向量来存储不同的派生类。我需要访问派生类中可能存在的方法/对象,而不是基类中存在的方法/对象。

我尝试使用类似base* getObject(int idx);的形式的函数,然后使用dynamic_caststatic_castBase*的{​​{1}},但是似乎无法正常工作,因为编译失败。

我的基类看起来像这样:

Derived&

我的派生类如下所示:

        class Base {
          int a, b;
        public:
          virtual void f1(int) = 0;
          virtual void f2(int, int) = 0;
        };

应包含派生类的向量如下所示:

        class Derived : public Base {
          std::vector <int> myVector;
        public:
          void f1(int ai) override {}
          void f2(int ai, int bi) override {}
          int getFromVector(int idx) { return myVector[idx]; }
        }

我想做的是从 std::vector <Base*> derivedObjects; 向量中得到一些东西,然后访问derivedObjects

1 个答案:

答案 0 :(得分:0)

我同意Igor Tandetnik的观点,即可能需要更好地设计接口类。 使用给定的语句,可以使用dynamic_cast,但是您必须记住,动态转换是一种尝试,可能会失败。由于在强制转换操作失败的情况下使用的是派生类的引用,因此必须捕获异常并进行相应的处理。

例如,如果您具有Derived1和Derived2类,并且试图将Derived1对象动态地强制转换为Derived2引用,则将引发bad_cast异常。发生这种情况是因为引用对象不能设置为null。 或者,您可以尝试将其强制转换为派生类型的指针,而不是引用。 尝试动态转换后,可以检查指针是否为空。

更多参考:http://www.cplusplus.com/doc/tutorial/typecasting/

相关问题