用Qt从零开始学C++:复合数据类型、变量、常量

        上一篇介绍了一些数据类型,那些数据类型都是基本数据类型。但是要实现一个适用的功能,仅仅有基本数据类型是非常不方便的,因此就有了用基本数据类型构造的一些复合类型。常见的有枚举类型、联合体类型、结构体类型和class类型。其中前3种是从C语言继承过来的,在C++也同样适用。

        在介绍这几种复合类型之前先要了解变量常量的概念。一个变量就像一辆,可以完成运输功能,把一个数据“拉”到目的地,把数据放下然后再去拉下一批数据,也就是它拉的数据可以一直变化。但是不同类型的车允许运输的类型一般都有规定,不允许乱用,比如轿车一般只能载人和随身物品,不能运其他的东西,渣土车只能运输土石方,不能载人等等,变量也是如此。我们声明一个变量,就好比造了一辆车,这辆车能运什么类型的东西根据我们的需要来设定。比如我们需要一辆能运输int型数据的车,就可以这样写:

int var;

        前面的int表示车辆能运输的内容,后面的给这两车挂个牌照var,以后var就表示这两车,这样我们就有了一辆能合法运输int型数据的车子了。如此简单,有没有一点点上帝视角的感觉^-^?最后的分号表示这行代码结束。在C++中,分号表示语句的结束。同样其他类型的变量也可以按照类似的格式进行声明。声明过的变量才可以使用,也就是先得把数据“车”造好才能开。注意,各种类型的变量不能混用,就好比不能用私家车跑出租拉乘客,因为那样不安全且违法,例如,刚才我们声明的这个int型变量var,不能用来存int型以外其他任何类型的数据,比如double型、bool型等等都不行,如果这么做编译器判定违法,就会报错。当然如果非要这么做,在一定条件下通过类型强制转换也有有可能做到,但风险较大,咱们以后再说。

        常量,就像一辆广告车,自打它开出来,上面的广告就不能改了,无论走到哪,它一直播放同一个广告。

        上面提到的复合类型就是由基本数据类型的变量和常量组合而成的数据类型。然后我们就可以像基本数据类型一样使用这些复合数据类型。

枚举型:把一组性质类似变量用大括号括起来,前面加个enum和名称就可以了,比如我要声明一个“枚举周末”类型

enum weekend {Saturday, Sunday};

使用

weekend day;

这时的变量day只能有Saturday, Sunday两种值。

联合体:前面几种数据类型限制严格,使用起来不是很方便,联合体相对就比较宽松一些。联合体就像一辆多功能车,可以载人、可以拉货……,但是这么多功能一次只能使用其中一项!因为它们这么多功能是共享空间的,如果拉货就不能载人,如果载人就不能拉货。声明时需要用关键字union

union var_u{
    double d;//8字节
    int i;//4字节
};

这里声明了一个联合体var_u,这个联合体既可以装ldouble类型的数据,也可以装int类型数据,但var_u的大小为8字节,也就是按照里面最大个的类型来给var_u分配内存空间。

使用方法

   union  var_u v;//创建一个var_u变量
    v.d = 5.1;//给成员d赋值,此时成员i的空间内也是5.1,但是如果调用v.i只能显示整数部分

    v.i = 6;//给成员i赋值,此时成员d也变成了6啦,原来的5.1被清空

结构体:一种放飞自我的类型,它就像火车,装的东西多、类型复杂、功能强大,你能想到的东西都可以放进去。计算机给它分配空间的时候也像火车一样,空间不够了就往上挂车厢,直到够了位置!关键字为struct

struct Student{
    string name;
    int age;
};

这样我们就声明了一个student结构体,这个结构体可以同时记录student的name,和age,其中name是string类型,也就是字符串,age是int类型。

使用方法

struct Student s1;//创建一个Student结构体变量s1
s1.name = "hello";//设置s1的成员name为hello
s1.age = 18;//设置s1的age成员为18

在C++中更常用的是与之类似的class类型。

class(类)类型:C++中,class类型(我习惯称class类型,翻译称类型总觉得有点别扭)与结构体类跟非常像,结构体更开放一些,里面的成员默认是public的,可以外部访问,而class类型的成员默认是private的,外部不可访问,另外声明和使用的语法上略有差异。换句话说,结构体类型和class类型都像个家,struct家的门是常开的,里面的东西谁都用,而class家是常关的,里面的东西只能它自己用。常开的话肯定不安全,常关的话使用起来很不方便,所以就用了public、protect、private这三个关键字来设定访问权限。class类型的相关内容太多,因为C++当初主要是在C的基础上增加class内容而成的,也称“带类的C”,留待后期再说。

几种数据类型讲完,后面就要开始上手项目了,其中遇到什么语法和知识点就讲什么,不论章法也没什么系统性。C++本身就很庞杂,很多语法可能写一辈子C++也未必能用上一次。从这一点来讲,我觉得还是C要好一点,虽然时髦的东西很少,很多老旧的语法规则,但是兼容性好啊!祖传的C代码永不过时。可祖传的C++代码,后来的人可就不一定能完全看懂了。当然C++是面向“对象”的,一定程度上减少了重复工作,是一大进步。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值