私有继承的派生类的对象不能访问基类成员函数
Object of derived class inherited privately cannot access base class member function
#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
的Print方法将是D
的私有属性,所以我应该使用D
的对象访问它是合乎逻辑的。我得到的错误是:
'B'不是'D'的可达基。
私有继承意味着基类只能在派生类的成员函数中访问。通常,当您想要为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
您可以在这里阅读更多信息:私有、公共和受保护继承的区别
或者,正如@WhozCraig提到的,您可以通过派生类的public
部分中的using
语句更改访问:
using B::print; // now it is visible in the derived class
相关文章:
- 为什么此派生对象无法访问基类的后递减方法?
- 继承和友元函数,从基类访问受保护的成员
- 无法访问基类函数 C++
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 如何从派生类中的基类访问变量的值?
- 抽象类的需求是什么?为什么要通过其基类访问派生类方法?在C++
- 如何从另一个类的基类访问派生类中的受保护成员
- 尝试从基类访问受保护的构造函数时出现错误 C2248
- 从C++中的基类访问子数据
- 从抽象基类访问另一个基类成员
- 从Derivered类设置值,同时从基类访问相同的值
- 如何使用多态性从基类访问派生类向量成员
- 如何在C++中从基类访问派生类的属性
- 从基类访问联合的公共部分
- (c++)从私有基类访问私有成员变量
- 类的某些成员只能由基类访问吗
- 无法从c++基类访问变量
- C++从基类访问两个类组成中的私有成员
- 基类访问规范与类成员访问规范
- 从基类访问派生类