分类: LINUX
2012-07-30 15:02:58
中的构造数据类型如结构、联合、枚举等在C++中仍然有效,由于C++新增了一种类型名class,许多人错误地认为struct只能用来包装数据,或者class必须定义成员函数。
C语言支持基本数据类型组合起来形成更大的构造数据类型,这就是C语言的struct,有时也称为用户自定义数据类型。构造数据类型还可以嵌套和引用,实际上,构造函数类型是一个递归的定义:
1. 由若干基本数据类型组合而成的类型是构造数据类型;
2. 由若干基本数据和构造数据类型组合而成的数据类型是构造数据类型;
3. 由若干构造数据类型组合而成数据类型是构造数据类型。
语言本身的这种能力使我们能够定义非常复杂的数据结构,例如树、链表和映射等。
C++语言对C语言的struct进行了改造,使其也可以像class那样支持成员函数的声明和定义,从而使struct变成真正的抽象数据类型,这使得许多人对struct和class倍感困惑。
当语言支持某种特征时,是否使用这种特征则完全取决于程序员。因此,并不是说class支持成员函数的定义,我们就一定要在每个class中都定义成员函数;也并不是说struct过去不支持成员函数定义,我们就非得用class完全取代struct。实际上就C++语言本身来讲,struct和class除了默认的成员访问权限,这一点不同外,没有任何区别。
而在C++语言中,如果不特别指明,struct成员的默认访问限定符为public,而class成员的默认访问限定符为private。
因此,在C++程序中,只要你明确每个成员的访问权限,那么完全可以用struct取代class,也完全可以用class取代struct。