c ++中派生类的基类指针

con*_*ong 1 c++

#include <iostream>
using namespace std;

class A {
    public:
        A ();
        virtual ~A();
};

class B: protected A {
    public:
        virtual ~B ();
};

int main() {
    A* pb = new B;//A is inaccessable base of B
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,它告诉我A是不可访问的B的基础,pb是一个指针,指向B的指针,有什么问题?

Pat*_*ick 8

B类来自A类,但将其标记为受保护.这意味着只有B'的子类'看'B来自A.

由于主例程不是B的子类,因此它只看到B,而不是B从A派生.因此,不能将B指针强制转换为A指针.

要解决它,请将其更改为:

class B: public A {
public:
    virtual ~B ();
};
Run Code Online (Sandbox Code Playgroud)