如何使用基类指针引用派生类成员


class a{};
class b : public class a{
public:
int c;
};
a* var = new b;
var->c=2;  

最后一行不正确。是否可以引用派生类成员?

虽然var在编译时是一个b对象,但编译器并不知道这一点,因此您必须将其强制转换为类似这样的b对象或指针。

(*(b*)var).c = 2;
((b*)var)->c = 2;

我的计算机科学老师解释说,在进行多态性运行时和编译时时处理两种情况

希望这能有所帮助。

如果该成员不在基类中,则不应允许您访问它,并且它会产生编译错误。若要访问派生类的成员,可以将其类型转换为派生类。

class a{};
class b : public class a{
public:
int c;
};
a* var = new b;
((b*)var)->c=2;

您可以使用static_cast从Base向下转换为Derived,然后访问成员。

static_cast<b*>(var)->c = 2;

最新更新