C++类和C结构体类型的异同
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++语法来开发程序。
读者要仔细分析,掌握好每一个知识点,然后,自己总结出对该知识点的理解。自己总结出来的知识,理解才深刻,才是自己掌握的知识。
韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip
C++类和C结构体类型的异同相关推荐
- C++类和结构体 | 类与结构体类型
C++类与结构体类型 C++与C语言不同,在C语言的基础上增加了class类型后,仍保留了结构体类型struct,而且把它的功能也扩展了,允许用struct来定义一个类型,可以将前面用关键字class ...
- vector 结构体类型 使用 排序
如果要在Vector容器中存放结构体类型的变量,经常见到两种存放方式. 方式一:放入这个结构体类型变量的副本. 方式二:放入指向这个结构体类型变量的指针. 假设结构体类型变量是这样的, typedef ...
- C++中的空类与空结构体大小
今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { };int main() {st ...
- C语言程序设计 使用结构体类型处理组合数据——用户自定义数据类型
1 定义和使用结构体变量 1.1 自定义建立结构体类型 好处:反映出成员之间的内在联系. 在程序中建立所需要结构体类型.例如: 指定了一个新的结构体类型struct student. struct是声 ...
- MATLAB 数据类型中的结构体类型,及其构造方法
Matlab中的数据类型一共有四大类分别为: 1.数值类型 2.逻辑类型 3.字符和字符串类型 4.结构体类型 关于数据类型,尤其是前三种类型具体可见Matlab里的数据类型已经对其进行了详细的介绍. ...
- 【C进阶】之结构体类型( struct)
结构体类型( struct) 1 结构体相关的概念 2 声明结构体类型的语法格式 3 定义结构体类型的变量 4 结构体中成员的访问 5 定义普通的结构体类型的变量,并访问 5.1 先声明结构体类型,在 ...
- 结构体类型与结构体变量
01 结构体概念 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构体. 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggrega ...
- 结构体变量和结构体类型的定义
结构体类型定义 定义方式1:Typedef struct LNode {int data; // 数据域struct LNode *next; // 指针域 } *LinkList; 定义方式2:st ...
- c语言中结构体类型定义的函数指针,结构体中定义函数指针
结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...
- 结构体PLUS(计算结构体类型大小及位段)~~
如何计算结构体类型大小呢? 1. 结构体内存对齐 为什么要内存对齐呢? 2.修改默认对齐数 3.位段 什么是位段 位段的内存分配 位段的跨平台问题 位段的应用 关于结构体类型,之前阿涛写过一篇文章,里 ...
最新文章
- Understanding Clouds from Satellite Images比赛的discussion调研与colab数据集下载配置
- python json转dict(dict转json)
- 8Linux磁盘划分、RAID
- VS2013用InstallShield生成安装包文件步骤
- DOM 其他一些特性
- 面试官必问的信号量与生产者消费者问题
- SQL SERVER 备份数据库sql语句
- 「首席看点」也许敏捷就是问题所在
- TPS2552DBVR配电开关
- 漫画:为什么不能打断程序员?
- java微信服务通知
- C# IndexOf用法
- macOS 访达的隐藏小技巧
- 统计学cv值是什么意思_什么是CV值
- 0xc0000225无法进系统_系统重装|电脑无法开机蓝屏错误代码0xc0000225故障问题
- mysql五日均线_mysql – 如何在SQL中的某个日期范围内执行移动平均线?
- 速收藏 !回复审稿人意见时常用的英文套话
- 3GPP TS 23501-h20 中英文对照 | 5.29.2 5G VN group management
- Web开发之电子签章
- linux 查看mmc分区_查看MTD,EMMC,MMC三种设备的分区