网站首页 > 基础教程 正文
C++类和C结构体类型的异同
C++增加了class类型后,仍然保留了结构体类型(struct),而且,把它的功能也扩展了。C++允许使用struct来定义一个类类型。可以将前面用关键字class声明的类类型改为用关键字struct:
那么,C与C++二者有什么区别呢?何必多此一举,设两种功能一样的类型呢?这是由于C++语言在设计时所定下的一项原则:C++必须兼容C,使得大量过去用C编写的,已在广泛使用的C程序能够不加修改地在C++的环境下使用。
可以设想,如果C++是从零开始设计(而不是以C为基础),很有可能不会提供结构体这种数据类型,因为类类型已经包括了结构体类型的所有功能,而且功能更强,更符合面向对象程序设计的要求。为了使结构体类型也具有封装的特征,C++不是简单地继承C的结构体,而是使它也具有类的特点,以便于用于面向对象程序设计。用struct声明的结构体类型实际上也是类。
但是,用struct声明的类和class声明的类是有区别的。用struct声明的类,如果对其成员不作private或public的声明,系统将其默认为public(公用的)。如果想分别指定私有成员和公用成员,则应用private或public做显式声明。而用class定义的类,如果不作private或public声明,系统将其成员默认为private(私有的),在需要的时候也可以自己用显式声明改变。
请对比下面两个例子:
struct student
{
char name[32]; //姓名
char addr[32]; //家庭地址
long long number; //电话号码
void print() //输出成员的信息
{
cout << "name = " << name << endl;
cout << "addr = " << addr << endl;
cout << "number = " << number << endl;
}
};
由于没有用private或public对其成员作显式声明,系统将全部成员默认为public(公用的),外界可以任意引用其中的成员变量和成员函数。它不具有信息隐蔽的特征,除非将其中某些成员显式声明为private。
class student
{
char name[32]; //姓名
char addr[32]; //家庭地址
long long number; //电话号码
void print() //输出成员的信息
{
cout << "name = " << name << endl;
cout << "addr = " << addr << endl;
cout << "number = " << number << endl;
}
};
由于没有用private或public对其成员作显式声明,系统将全部成员默认值为private(私有的),外界不可以引用其中的成员变量和成员函数。它具有信息隐蔽的特征,除非将其中某些成员显式声明为public。
建议尽量使用class来建立类,写出完全体现C++风格的程序。
3 总结
本章我们学习了C++类的定义,并且使用C++类来定义对象。但是,C++类的定义不会这么简单,这里我们只是学习了定义一个C++类的语法。
下面,我们会继续学习C++类的特性,例如,C++类的构造函数,析构函数,多态继承等知识。
而且在类的封装特性里,还学习C++类的public, private, protected等属性。所以,我们需要一步一步,由浅入深地学习。掌握一个一个知识点。最终,学习完所有的知识点,再连接起来,就形成一个C++编程的知识点网络。才可以灵活使用C++语法来开发程序。
读者要仔细分析,掌握好每一个知识点,然后,自己总结出对该知识点的理解。自己总结出来的知识,理解才深刻,才是自己掌握的知识。
猜你喜欢
- 2024-12-30 C++ 在编程语言谱系中的位置及其特点
- 2024-12-30 C++基础知识总结(超详细总结) c++ 基础
- 2024-12-30 [面试]C++中struct和class的区别是什么
- 2024-12-30 C与C++利用pragma pack对结构体做成员打包对齐设置
- 2024-12-30 结构体所占内存大小 结构体所占内存大小是所有成员所占的内存字节数计算
- 2024-12-30 结构体的各种使用方法详细讲解-c\c++
- 2024-12-30 C++,结构体和类,结构体和类的区别,struct与class的区别
- 2024-12-30 C++编程:复合数据类型—结构体 c语言结构体复数运算
- 2024-12-30 C#与C++交互开发系列之复杂类型传递与解析
- 2024-12-30 C#和C++混合编程开发示例 c#,c++,c
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)