class a{};
class b : public class a{
public:
int c;
};
a* var = new b;
var->c=2;
最后一行不正确。可以引用派生的类成员吗?
答案 0 :(得分:1)
如果该成员不在基类中,则不应允许您访问该成员,并且应给出编译错误。要访问派生类的成员,可以将其转换为派生类。
class a{};
class b : public class a{
public:
int c;
};
a* var = new b;
((b*)var)->c=2;
答案 1 :(得分:1)
虽然var在编译时是b对象,编译器并不知道,所以您必须将其强制转换为b对象或指针。
(*(b*)var).c = 2;
((b*)var)->c = 2;
我的计算机科学老师解释说,在执行多态运行时和编译时要处理两种情况
希望这会有所帮助。
答案 2 :(得分:0)
您可以使用static_cast将基础从下垂向下转换为派生,然后访问该成员。
static_cast<b*>(var)->c = 2;