私有继承的派生类的对象不能访问基类成员函数

时间:2016-09-13 18:29:02

标签: c++ inheritance

#include <iostream>
using namespace std;
class B
{
  public:
  int x;
  void print()
  {
    cout<<x;
  }
};

class D:private B
{
};

int main()
{
  D d;
  d.print();
}

为什么我无法访问打印方法?来自B的打印方法将是D的私有属性,因此我应该使用D的对象访问它。 我得到的错误是:

  

&#39; B&#39;不是D&#39;

的可访问基础。

1 个答案:

答案 0 :(得分:2)

私有继承意味着只能在派生类的成员函数中访问基类。通常,当您要为has-a关系建模时,您使用私有继承,而不是is-it。情况并非如此,您正试图在main()中直接调用它。这将改为:

#include <iostream>

class B
{
public:
    int x{42};
    void print()
    {
        std::cout << x;
    }
};

class D: private B
{
public:
    void f()
    {
        print(); // can access the private one in B
    }
};

int main()
{
    D d;
    d.f();
}

Live on Coliru

您可以在此处详细了解:Difference between private, public, and protected inheritance

或者,正如@WhozCraig所提到的,您可以通过派生类的using部分中的public语句更改访问权限:

using B::print; // now it is visible in the derived class