【发布时间】:2020-03-13 16:59:25
【问题描述】:
为什么下面的代码会遇到‘A’ is an inaccessible base of ‘B’的错误?这是我的想法:
每当我们调用函数 foo() 时,它都会执行
new B(5),它会首先调用其基础结构 A 的构造函数。struct A 的构造函数是一个公共方法,因此它应该可以被其派生的 struct B 访问(如果我没记错的话,它是受保护的)。
然后会调用结构B的构造函数来创建一个有五个0的向量。
然后删除对象a会调用析构函数B,然后是析构函数A。
我的逻辑有什么问题吗?您的回答将不胜感激
#include <iostream>
#include <vector>
using namespace std;
struct A
{
A() { cout << "Constructor A called"<< endl;}
virtual ~A() { cout << "Denstructor A called"<< endl;}
};
struct B : private A
{
vector<double> v;
B(int n) : v(n) { cout << "Constructor B called"<< endl;}
~ B() { cout << "Denstructor B called"<< endl;}
};
int main()
{
const A *a = new B(5);
delete a;
return 0;
}
【问题讨论】:
-
因为你做了继承
private,外界没有人知道这个继承存在。所以从外面看,A和B是不相关的类型。
标签: c++