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

时间:2018-11-01 01:52:20

标签: c++ polymorphism

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

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

3 个答案:

答案 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;