C++中的struct

问题:

C语言中有struct自定义结构体类型;

C++中也有struct类型,而且,与C++中面向对象主要的数据类型class还极为相似。

那么,C++中struct和class之间有什么区别,什么情况下使用struct呢?

解决办法:

 

从C++语言设计者Bjarne Stroustrup的大作《C++编程语言(特别版)》中归纳C++中struct和class的区别,有以下几点:

1. 成员的默认访问权限。struct的成员默认是public的;class的成员默认是private的;

2. 默认继承权限。在没有明确指定的情况下,struct的默认继承方式是public,class的默认继承方式是private;

3. 作者认为,struct S { …不过是class S { public: …的简写形式。

4. 但作者的习惯用法是,将struct用于所有成员都是public的那些类,而这样的类,“并不是完整的类型,不过是个数据结构”

5. 对于有人提出的说法“class能用于模板参数,而struct不能用于模板参数”,本人持谨慎的怀疑态度。

因为,《C++编程语言(特别版)》13.2中指出,template<class C>只是说C是一个类型名,它不必一定是某个类的名字。

类型名的概念比类名更广泛,不仅包括由类定义引进的类类型的名字,还包括语言的内部类型、枚举、typedef引进的名字等。

 

本人根据以上总结,决定在自己使用C++的编程中,始终将struct作为一种复杂的数据结构来使用,其成员只包含成员变量,不包含成员函数。

这样,struct在C++中就与C语言中的意义更为接近,但C++中的struct更加安全。

标签