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结构体类型的异同相关推荐

  1. C++类和结构体 | 类与结构体类型

    C++类与结构体类型 C++与C语言不同,在C语言的基础上增加了class类型后,仍保留了结构体类型struct,而且把它的功能也扩展了,允许用struct来定义一个类型,可以将前面用关键字class ...

  2. vector 结构体类型 使用 排序

    如果要在Vector容器中存放结构体类型的变量,经常见到两种存放方式. 方式一:放入这个结构体类型变量的副本. 方式二:放入指向这个结构体类型变量的指针. 假设结构体类型变量是这样的, typedef ...

  3. C++中的空类与空结构体大小

    今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { };int main() {st ...

  4. C语言程序设计 使用结构体类型处理组合数据——用户自定义数据类型

    1 定义和使用结构体变量 1.1 自定义建立结构体类型 好处:反映出成员之间的内在联系. 在程序中建立所需要结构体类型.例如: 指定了一个新的结构体类型struct student. struct是声 ...

  5. MATLAB 数据类型中的结构体类型,及其构造方法

    Matlab中的数据类型一共有四大类分别为: 1.数值类型 2.逻辑类型 3.字符和字符串类型 4.结构体类型 关于数据类型,尤其是前三种类型具体可见Matlab里的数据类型已经对其进行了详细的介绍. ...

  6. 【C进阶】之结构体类型( struct)

    结构体类型( struct) 1 结构体相关的概念 2 声明结构体类型的语法格式 3 定义结构体类型的变量 4 结构体中成员的访问 5 定义普通的结构体类型的变量,并访问 5.1 先声明结构体类型,在 ...

  7. 结构体类型与结构体变量

    01 结构体概念 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构体. 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggrega ...

  8. 结构体变量和结构体类型的定义

    结构体类型定义 定义方式1:Typedef struct LNode {int data; // 数据域struct LNode *next; // 指针域 } *LinkList; 定义方式2:st ...

  9. c语言中结构体类型定义的函数指针,结构体中定义函数指针

    结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...

  10. 结构体PLUS(计算结构体类型大小及位段)~~

    如何计算结构体类型大小呢? 1. 结构体内存对齐 为什么要内存对齐呢? 2.修改默认对齐数 3.位段 什么是位段 位段的内存分配 位段的跨平台问题 位段的应用 关于结构体类型,之前阿涛写过一篇文章,里 ...

最新文章

  1. Understanding Clouds from Satellite Images比赛的discussion调研与colab数据集下载配置
  2. python json转dict(dict转json)
  3. 8Linux磁盘划分、RAID
  4. VS2013用InstallShield生成安装包文件步骤
  5. DOM 其他一些特性
  6. 面试官必问的信号量与生产者消费者问题
  7. SQL SERVER 备份数据库sql语句
  8. 「首席看点」也许敏捷就是问题所在
  9. TPS2552DBVR配电开关
  10. 漫画:为什么不能打断程序员?
  11. java微信服务通知
  12. C# IndexOf用法
  13. macOS 访达的隐藏小技巧
  14. 统计学cv值是什么意思_什么是CV值
  15. 0xc0000225无法进系统_系统重装|电脑无法开机蓝屏错误代码0xc0000225故障问题
  16. mysql五日均线_mysql – 如何在SQL中的某个日期范围内执行移动平均线?
  17. 速收藏 !回复审稿人意见时常用的英文套话
  18. 3GPP TS 23501-h20 中英文对照 | 5.29.2 5G VN group management
  19. Web开发之电子签章
  20. linux 查看mmc分区_查看MTD,EMMC,MMC三种设备的分区

热门文章

  1. C++11Lambda表达式捕获变量(Capturing the Variable)与本地变量(Local Variable)
  2. 虫师乙醇自动化测试培训第三期
  3. QQ邮箱的POP3与SMTP服务器是什么?
  4. mind思维导图软件
  5. 深度学习论文写作框架
  6. C#冷门系列之Lazy
  7. 【读书笔记】《解忧程序员》读后感
  8. PHP写json文件的树形菜单,树形菜单(无级树)json数据
  9. linux 清空stdin缓冲,清除stdin缓存中的数据
  10. oracle数据库应用与开发习题,oracle数据库应用与开发答案