C/C++struct与C++struct/class关键字详解
2016-05-31 11:51
225 查看
C/C++中的struct
C中的struct只是一个简单单单结构体,其中只能声明变量,而不能声明函数,而C++中的struct中却可以有函数。C++中struct成员默认访问权限为public,这是为了兼容C。在C中没有访问权限这一说。
C++中的struct/class(转)
1.字面上的区别
在字面上struct是structure的缩写,通常叫做“结构体”,在C语言里用于将多种数据、多个变量组织在一起,便于表达比较复杂的数据类型,在C++中为了兼容C语言保留了该关键字,并且保留了C语言中的所有功能。而class,则称作“类”,是C++新增来支持面向对象思想概念中“类”的概念的一个关键词,并且比struct具有了更强大的功能,不仅可以像C语言中的struct一样把数据组织在一起,还可以将与数据相关的方法组织在一起,并增加了如虚函数、继承等特性来支持面向对象编程。
虽然在字面上struct与class的含义不一样,但在C++中其功能基本是相同的,C++中的struct不仅可以包含数据成员,而且与class一样支持新增的面向对象特性,仅在以下细节上有略微差别。
既然两者在字面上不一样,为了更好地利用这一点,建议在C++中使用struct时仍然只使用C中的特性,来表示一些复杂的数据而不进行方法的封装,这样还可以提高软件的可读性。
2.默认成员权限
struct的成员默认权限是public,而class的成员默认权限是private。例如:struct Sb{ void f( void ) { } };
struct Sc : Sb{ };
class Cb{ void f( void ) { } };
class Cc1 : public Sb{ };
class Cc2 : Sb{ };
sb.f(); // 合法
cb.f(); // 不合法,因为在Cb类中f( )函数默认为private,此处不可访问
建议在工程代码中显示声明成员的权限,而有使用默认权限,因为并不是所有人都知道这一点。
3.默认继承方式
struct的默认继承方式为public,而class的默认继承为private,例如:Sc sc; Cc1 cc1; Cc2 cc2;
sc.f(); // 合法
cc1.f(); // 合法,因为Cc1显示地使用public继承
cc2.f(); // 不合法,Cc2默认private继承自Sb,在Cc2中f( )为private
在C语言中struct不可以继承,虽然我们知道在C++中struct可以继承,但在实际使用中,在不需要继承的场合我们使用struct,而在需要继承的场合使用class,这样更贴近其字面意思,使程序有更好的可读性。
虽然知道class的默认继承为private,但并不是项目组的每个人都清楚这一点,建议在工程代码中不省略private,使代码可读性更强。
4.用于定义模板参数
模板为C++语言新增特性,C语言没有,只有class可用于定义参数,而struct不可以,例如:template
class TValue {
private: T _v;
public: TValue(T v) : _v(v){}
T Get( void ) { return _v; }
};
此处只能使用class,不能使用struct。当然,此处还可以使用typename代替class,class与typename也仅在定义模板参数时可以互换,而且建议此时使用typename,因为这样读起来更接近人类语言,更具有可读性。
相关文章推荐
- 二路归并排序算法实现-完整C语言程序
- 【LeetCode】215. Kth Largest Element in an Array,基于Java和C++的解法
- [Error] ISO C++ forbids comparison between pointer and integer [-fpermiss
- c++ 每周一些题(5)
- 河南第五届省赛 B 最强DE 战斗力 -- (大数乘法 c++ OR java)
- 二叉排序树(BST)的思路及C语言实现
- C++延时函数
- 感知机c/c++代码实现
- c++中this指针的用法详解
- C/C++中extern关键字详解
- C/C++中const关键字详解
- 基于CGAL高效生成TIN网
- 设计模式C++实现(6)——建造者模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(4)——单例模式
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现(2)——策略模式
- 设计模式C++实现(1)——工厂模式
- OC语言3-方法和文件编译
- 数组中只出现一次的数字 -- 尝试下set,以及异或^