【问题标题】:Access member variables of derived class object pointed to by a pointer to its base class访问由指向其基类的指针指向的派生类对象的成员变量
【发布时间】:2009-09-01 09:16:31
【问题描述】:

我有一个基类和两个派生自它的类。我在基类中有几个虚函数,所以我创建了一个指向基类的指针并使用这个指针来访问这些方法。

现在我想使用指向派生类对象的基类指针访问派生类的成员变量(该变量在基类中不存在)。

这可以吗?应该这样做吗?

【问题讨论】:

    标签: c++ polymorphism


    【解决方案1】:

    为什么要访问派生类的接口?当您使用多态性时,您不需要关心基类引用/指针背后的内容。 如果你这样做了,那通常是设计缺陷的暗示。

    您正在尝试做的是“开机类型”。 (“如果B* 后面是D1 对象,则执行此操作,否则执行此操作”。) 开启类型正在规避多态性和不好的迹象。

    注意:有一种方法可以做到这一点 (dynamic_cast),但由于上述原因,我认为这是一种不好的做法,因此不会详细说明。

    【讨论】:

      【解决方案2】:

      是的,您可以这样做,但不建议这样做。您可以使用dynamic_cast将基类指针强制转换为派生类指针,并获取派生类中的变量。

      例如,如果您有一个名为 Base 的基类和两个派生类 Derived1 和 Derived2,并且如果您有 Base* p 指针,那么您可以这样做:

      Derived1* d1 = dynamic_cast<Derived1*>(p);
      

      【讨论】:

        【解决方案3】:

        编写一个虚函数,它会在每个类中以及在您实际“需要”访问变量的地方执行相应的操作 - 调用该函数。就这么简单。

        【讨论】:

          【解决方案4】:

          只需将该变量移至基类即可。当基类实现静态多态时,唯一需要调用派生类的方法(或使用变量)的情况是Curiously recurring template pattern。在其他情况下,它看起来像是糟糕的设计。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-24
            • 2015-02-04
            • 1970-01-01
            • 1970-01-01
            • 2021-05-20
            • 2014-06-16
            • 1970-01-01
            • 2014-12-05
            相关资源
            最近更新 更多