当被问到B类的私有成员是否由D继承而来,一个从B派生出来的类时,人们强调说:是的,它们是继承的,但不能直接访问,只能间接通过基类中的公共方法。好的,但差异之间没有被继承和不能直接访问?例如,类X(不是从B衍生而来)也可以通过B的公共方法访问B的私有成员,即使X不从B继承任何东西。 1)未被继承和 2 )被继承并且不能直接访问。 什么不明确?私有成员的继承
私有成员的继承
回答
区别在于班级布局。
struct B {
private: char buf[1024];
};
struct D : B { };
这里,sizeof(D)
> = sizeof(B)
。它仍然有那里,即它明显地继承。
如果基类具有可以由派生类被覆盖虚函数,显然这是一个能够访问一个基类实例类的一个重要区别,但不从它继承:
class B
{
public:
virtual ~B() {}
int get_a() const
{
do_something();
return a;
}
virtual void do_something() const
{
std::cout << "In B\n";
}
private:
int a{};
};
class D : public B
{
virtual void do_something() const
{
std::cout << "In D\n";
}
};
int main()
{
D d;
d.get_a();
}
如果基类没有任何虚函数,那么从它继承的有用性就不太清楚了。事实上,最好不要从它继承(至少是公开的),因为缺少虚拟析构函数可能会导致一些问题,而应该将其作为成员变量。
我想你误解了我的帖子。问题是:私有数据成员是否被继承?为了争论,让我们假设他们不是(但仍然可以通过mutators/accessor间接访问)。那么会有什么不同呢? –
@JKay我不明白。如果私人成员没有被继承,那么访问者会去哪里获取数据? –
作为Base成员的访问者(公共方法)有权访问(Base的)私有数据成员。 –
- 1. 继承和私有成员
- 2. 私有静态成员和继承
- 3. 组成了私有继承
- 4. 私人会员和继承
- 5. 通过继承函数(?)读取基类的私有成员
- 6. superClass的私有成员是否继承了子类... Java?
- 7. 访问专用模板的私有/继承成员变量
- 8. 我可以继承派生类中的私有成员吗?
- 9. C++继承中的保护和私有成员变量
- 10. 为什么派生类继承基类的私有成员?
- 11. 如何在JavaScript中继承私有成员?
- 12. 为什么私有数据成员在子类继承
- 13. C++私有继承和静态成员/类型
- 14. C++多重继承私有成员ambigious访问
- 15. 从基类继承私有成员到派生类C++
- 16. C++子类不能从父类继承私有成员?
- 17. C#继承私有类和公共成员
- 18. MSTest,访问器,继承和私有成员
- 19. JavaScript中的私有继承
- 20. C#中的私有继承?
- 21. 覆盖继承的成员?
- 22. 为什么私人会员继承?
- 23. 错误重复:私人成员的继承?
- 24. 私有成员没有被Java中的子类继承(或可以覆盖)?
- 25. 私有变量继承
- 26. 继承和私有变量
- 27. 私有继承或遏制
- 28. 继承和私有方法
- 29. C++ - defenition - 私有继承
- 30. 私有继承和交换
您可以在http://en.cppreference.com/w/cpp/language/access上阅读更多有关辅助功能的内容。 –
不错,除了我的问题不是关于访问,它是关于被继承的意义 –
您可能想(a)用相关代码和更直接的问题更新问题,或者(b)用相关代码创建新问题,更直接的问题。 –