为什么以下代码会遇到错误“ A”,而无法访问“ 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;
}
Run Code Online (Sandbox Code Playgroud)
seb*_*ckm 11
您的逻辑没有错,只不过缺少了一点:
private继承基本上意味着仅继承类(B在这种情况下)知道它是从base继承的A。反过来,这意味着只能B利用此继承附带的所有特权。这些特权之一是能够强制B*使用A*。该函数foo()不知道有关B的继承,因此无法执行该转换。