当前位置:  开发笔记 > 编程语言 > 正文

私人继承在C ++中引起问题

如何解决《私人继承在C++中引起问题》经验,为你挑选了1个好方法。

为什么以下代码会遇到错误“ 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的继承,因此无法执行该转换。



1> sebrockm..:

您的逻辑没有错,只不过缺少了一点:

private继承基本上意味着仅继承类(B在这种情况下)知道它是从base继承的A。反过来,这意味着只能B利用此继承附带的所有特权。这些特权之一是能够强制B*使用A*。该函数foo()不知道有关B的继承,因此无法执行该转换。

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有