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;