为什么以下代码会遇到错误“ A”,而无法访问“ B”呢?这是我的想法:
每当我们调用函数foo()时,它将执行new B(5)
,它将首先调用其基本结构A的构造函数。
struct A的构造函数是一个公共方法,因此它的派生struct B应该可以访问它(如果我没有记错的话,应加以保护)。
然后将调用结构B的构造函数以创建具有五个0的向量。
然后删除对象a将调用析构函数B,然后调用析构函数A。
我的逻辑有什么问题吗?您的回答将不胜感激
#include#include using namespace std; struct A { A() { cout << "Constructor A called"<< endl;} virtual ~A() { cout << "Denstructor A called"<< endl;} }; struct B : private A { vector 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; }
sebrockm.. 11
您的逻辑没有错,只不过缺少了一点:
private
继承基本上意味着仅继承类(B
在这种情况下)知道它是从base继承的A
。反过来,这意味着只能B
利用此继承附带的所有特权。这些特权之一是能够强制B*
使用A*
。该函数foo()
不知道有关B
的继承,因此无法执行该转换。
您的逻辑没有错,只不过缺少了一点:
private
继承基本上意味着仅继承类(B
在这种情况下)知道它是从base继承的A
。反过来,这意味着只能B
利用此继承附带的所有特权。这些特权之一是能够强制B*
使用A*
。该函数foo()
不知道有关B
的继承,因此无法执行该转换。