我有一个派生自另一个类的类,我使用一个基类指针数组来保存派生类的实例,但是由于该数组属于基类,所以我无法使用指针表示法访问属于该派生类的成员,是是否可以通过简单的命令访问这些成员,还是应该重写基类以定义成员并仅在派生类中使用它?

例子:

class A {
public:
    int foo;
};

class B : public A {
public:
    char bar;
};

class C : public A {
    int tea;
};

int main() {
    A * arr[5];
    arr[0] = new B;

    char test = arr[0]->bar; //visual studio highlights this with an error "class A has no member bar"

    return 0;
}

最佳答案



这是设计使然:您没有告诉编译器指针所指向的对象是派生类型的。



如果您100%确定指针指向static_cast<B*>(arr[0]),则可以在执行B时执行此操作,但是应将转换解决方案用作最后的解决方案。相反,您应该在基类中派生一个成员函数,并在派生类中提供一个实现:

class A {
public:
    int foo;
    virtual char get_bar() = 0;
};

class B : public A {
    char bar;
public:
    char get_bar() {
        return bar;
    }
};

关于c++ - 从基类的指针访问派生类的成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36525002/

10-09 15:45
查看更多