从基类的指针访问派生类的成员

Ste*_*hen 5 c++ polymorphism pointers class

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

例:

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;
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 6

我无法使用指针表示法访问属于派生类的成员

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

我是否可以通过简单的命令访问这些成员

static_cast<B*>(arr[0])如果您在100%确定指针指向的情况下执行,则可以执行此操作B,但应使用强制解决方案作为最后的手段.相反,您应该在基类中派生成员函数,并在派生类中提供实现:

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

class B : public A {
    char bar;
public:
    char get_bar() {
        return bar;
    }
};
Run Code Online (Sandbox Code Playgroud)