访问派生类对象的成员变量,指向其基类的指针

时间:2009-09-01 09:16:32

标签: c++ polymorphism

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

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

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

4 个答案:

答案 0 :(得分:7)

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

您要做的是“开启型”。 (“如果B*后面是D1对象,请执行此操作,否则执行此操作”。)开启类型可以规避多态性和不良符号。

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

将该变量移动到基类。当实现静态多态时,Base类需要调用Derived类的方法(或使用变量)的唯一情况是Curiously recurring template pattern。在其他情况下,它看起来很糟糕。