在C++中,为什么private是类成员的默认可见性,但public是结构体?C++类/结构成员的默认可见性
35
A
回答
61
C++是作为C的超集而引入的。结构从C中继承下来,其成员的语义是公共的。存在大量的C代码,包括需要使用C++的库,它们使用结构。类是在C++中引入的,并且符合OO的封装哲学,它们的成员默认是私有的。
1
可能与C结构向后兼容。这种方式在C代码中声明的结构在C++代码中继续以相同的方式工作。
7
因为一个类是做对象定向的常用方式,这意味着成员变量应该是私有的并且具有公共访问器 - 这对创建low coupling很有用。另一方面,结构必须与C结构兼容,C结构始终是公共的(C中没有公共和私有概念),并且不使用访问器/增变器。
相关问题
- 1. C#类和成员(字段,方法等)的默认可见性?
- 2. C#的默认可见性
- 3. C++:类成员中的默认值
- 4. 默认析构释放的类的阵列成员,C++
- 5. UML默认可见性
- 6. C++默认参数类成员
- 7. 内部类成员/属性可见性(C#)
- 8. 结构类成员
- 9. C++类的非默认构造函数是另一个类的成员吗?
- 10. ContentControls的DataTemplate默认可见性
- 11. 未初始化的结构成员的默认值
- 12. 类型成员的默认构造函数的默认参数struct
- 13. 结构成员的默认对齐方式
- 14. C++ c-tor处理默认成员值构造异常?
- 15. 结构在C,其成员也结构
- 16. C结构 - 合法成员?
- 17. C动态成员结构
- 18. C++结构数据成员
- 19. 关于C结构成员
- 20. 结构与字符串成员?无效的默认实例可接受?
- 21. 默认构造函数不初始化类的实例成员?
- 22. Kotlin嵌套成员的可见性
- 23. Java - 私有成员vs私有内部类的默认成员
- 24. c结构与默认的valuabel?
- 25. C结构阵列的默认值
- 26. C++调用非默认构造函数作为成员
- 27. 如何正确初始化非默认构造类成员?
- 28. 初始化成员类与非默认构造函数
- 29. 构造不承认属性成员
- 30. F#中的类型扩展和成员可见性F#
那么,公平地说,封装不是所有成员都是私有的。使用C++内联,访问方法可以非常便宜,但是在许多OOP语言中,由于函数调用的开销,人们倾向于使用公共访问,因为它更便宜。为了更好的控制,如果他们的lang支持它,可以使用属性声明。但是,在本机代码中,跟踪变量变化比托管语言更难,因此通过代码中的单个点设置属性是有意义的。 – progician 2016-01-02 19:07:46