#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;
的可访问基础。
答案 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();
}
您可以在此处详细了解:Difference between private, public, and protected inheritance
或者,正如@WhozCraig所提到的,您可以通过派生类的using
部分中的public
语句更改访问权限:
using B::print; // now it is visible in the derived class