1. 关键词的困扰
(1)关键词 struct 本身并不一定要象征其后随之声明的任何东西。
(2)可以使用 struct 代替 class,但仍声明 public、protected、private等,以及一个完全的 public 接口,virtual functions,单一继承、多重继承、虚继承等。
(3)C 所支持的 struct 和 C++ 所支持的 class 间,有一个观念上的重要差异。关键词本身不提供这种差异,这两种声明的观念上的意义取决去对声明本身的检验。
(4)struct 关键词的使用实现了 C 的数据萃取观念,而 class 关键词实现的是 C++ 的ADT 观念,则“不一致性”是一种错误的语言用法。例如:
//这两个声明会造成矛盾的存储空间static int foo;extern int foo;
(5)class 的真正特性是由声明的本身(declaration body)来决定的。
2. 策略性正确的 struct
(1)C++ 中凡处于同一个 access section 的数据,要保证其声明次序出现在内存布局中,而被放置在多个 access sections 的数据。排序次序则不一定。
(2)组合,而非继承,才是把 C 和 C++ 结合在一个的唯一可行方法(conversion 运算符),例如:
struct C_point { };class CPoint{public: operator C_point() { return m_cpoint; }private: C_point m_cpoint;};
(3)C 的 struct 在 C++ 中的一个合理用途:需要传递“一个复杂的 class object 的全部或部分”到某个 C 函数中去,struct 可以把数据封装起来,并保证和 C 有兼容的空间布局。(前提是在组合的情况下)