它只是允许逻辑分组吗?在C++中,为什么在类/结构的公共,私有和受保护成员上不被语言强制分组?
2
A
回答
4
它给你灵活性。例如,你可能有一堆构造函数,一些公共的,一些受保护的,一些是私有的 - 你不希望它们全部组合在一起吗?
1
我想你是对的。不强制让用户可以按照他们认为合适的方式对事物进行分组,以获得更好的代码可读性。
编译器可能在内存中组织不同的东西。
编辑:按该规范:
第9.2节第12(1998和2003的标准):(非联合)的
非静态数据成员类而没有中间的访问限定声明被分配以便后面的成员在类对象中拥有更高的地址。未指定由访问说明符分隔的非静态数据成员的分配顺序(11.1)。执行对齐要求可能会导致两个相邻成员不能立即分配;所以可能需要管理虚拟功能(10.3)和虚拟基类(10.1)的空间。
0
这个信息我的猜测是,它是C的理念,它假设你知道自己在做什么,并为您提供了最大的灵活性的产物。这就像在if语句中允许单个=一样。
0
我实际上以一种稍微不愉快的方式利用了这一点:我经常使用的代码习惯是私有成员,具有公共访问器函数。
我有一个MACRO(不寒而栗),它会从一行自动生成这些。
例如:
PROPERTY(int, MyVal);
...生成:...
private:
int fMyVal;
public:
void setMyVal(const int f) { fMyVal = f; };
int getMyVal() { return fMyVal; };
这工作只要细如你记得PROPERTY宏切换当前的可见性,这是不愉快的。 ...
如:
protected:
int v1;
PROPERTY (int, v2) // fv2 is private with public accessors
int v3; // whoops. f3 is public,
3
你为什么强迫它?它根本无助于编译器,它不会让客观上更容易让人阅读。 C/C++理念的一部分是,该语言不会制定任何不支持某种特性/功能的任意规则。
它使代码生成变得更容易。许多编码风格每个类不止一次地使用访问说明符 - 首先定义所有的本地类型,然后是所有的构造函数,然后是所有的方法,然后是所有的实例变量等等......
C++给你足够的绳索来拍摄自己在脚下,但它具有相同的灵活性,可以让您构建优雅,可维护,抽象的应用程序。
0
在“C++编程语言第3版”中,Stroustrup说这是为了使代码生成更容易。
尽管确实有意义的是,实际二进制文件中每个字段的位置是基于该字段在源代码中声明的顺序,所以这允许某人保持与C甚至其他语言的某种布局兼容性/眼镜。
相关问题
- 1. C++类(公共,私有和受保护)
- 2. javadoc所有 - 私人,公共和受保护的成员
- 3. 公共私人和保护在objective-c
- 4. C++为什么要使用公共,私有或受保护的继承?
- 5. Symfony EventListener:为什么受保护(而不是私人)成员?
- 6. 为什么Joomla不使用私人,公共和受保护的关键字?
- 7. 为什么受保护的成员可以被TypeScript中的公共成员覆盖?
- 8. C++结构中的私有和受保护的可用性
- 9. C++ - 访问基类的受保护/私有成员
- 10. 公共成员和公开继承的受保护成员之间有什么区别?
- 11. 受保护的成员在eclipse中不被识别C++
- 12. 为什么在Obejct类中有公共方法,它们可能受到保护?
- 13. PHP类常量 - 公共,私有还是受保护的?
- 14. 范围的私有,保护和公共
- 15. C++:允许访问受保护的类的成员,而不是私人成员
- 16. 如何在c中分配结构的受保护静态成员?
- 17. 公共属性和私人成员C#
- 18. 私人和受保护成员如何在PHP OOP中运行?
- 19. 公共类,但私有成员变量?
- 20. 属性公共和私人但不受保护?
- 21. python中的私有公共受保护访问说明符
- 22. Java通过受保护的getter访问私有超类成员
- 23. 私有和受保护的OOP有什么不同?
- 24. C#继承私有类和公共成员
- 25. 为什么要从外部类访问受保护的成员?
- 26. “公共”,“私人”和“受保护”方法的确切做法是什么?
- 27. D类的公共,私有和受保护的访问限定符
- 28. 有无论如何定义公共或私人或受保护的类在PHP
- 29. 您应该在Ruby中使用私有,受保护和公共修饰符吗?
- 30. 在C++中使用受保护的成员数组时不完整的类型
我认为内存顺序实际上是固定的,以保持与C结构向后兼容。 – 2008-11-21 19:43:51
它是,除非在成员之间有访问说明符,这正是这里的情况。我已经包含了规范中的相关部分。 – 2008-11-21 20:02:00
感谢您的澄清 - 我每天都会学到新的东西。 – 2008-11-21 20:10:01