超类的指针如何访问子类的变量?

时间:2015-12-03 16:16:17

标签: c++ function variables pointers inheritance

我有一个继承自A类的A类和B类.B类有一个变量和一个在A类中不可用的函数。我做了一个指针

A* ptr=new B();

那么ptr如何访问属于B类的变量和函数?

3 个答案:

答案 0 :(得分:1)

A类根本不能"看" B类的功能。相反,您必须使用类似于A到B的dynamic_cast,检查null,然后按照您的喜好继续操作。 Here is a nice tutorial to explain this a lot better than I can.每个演员都有其优点和缺点;好好学习。另外,尽量避免C风格转换。

编辑:似乎我误解了这个问题。答案仍然是正确的。 A类将无法"看到" B类的变量。铸造仍然允许你访问它们。

答案 1 :(得分:0)

您可以强制派生类实现在基类中定义的纯虚方法:

class A
{
public:
    virtual void do_things() = 0;
};

class B : public A
{
public:
    virtual void do_things()
    {
        //Implementation
    }
};

这样,您可以通过指针A*调用B类实现的方法:

A* a_ptr = new B();
//The method implemented in class B will be called
a_ptr->do_things();

您还可以假设a_ptr指向B类的对象。如果a_ptr未指向Bdynamic_cast<B*>返回的指针将是nullptr。如果static_cast<B*>中没有虚拟方法,则可以使用A

b_ptr = dynamic_cast<B*>(a_ptr);
b_ptr->do_things;

这样,您不需要A类中的纯虚函数。

答案 2 :(得分:-1)

实际上,动态强制转换只适用于多态类(虚拟关键字),并且最常用于向下转换,你在这里尝试做的是&#34; upcast&#34;它始终有效,可以使用static_cast进行公共继承。