自定义类型

                                      为类型自定义新的别名

语法使用说明
typedef 已有类型名 新类型名表

例如:

         typedef double Area, Volume; 这里的Area和Volume,就是为double类型新取的类型名称(Area和Volume就跟double是一个意思了)

         typedef int Natural;这里的Natural,就是为int类型新取的类型名称(Natural就跟int是一个意思了)

         Natural i1,i2;这里的i1和i2的类型,就相当于 int i1, i2;

         Area a;这里的a的类型,就相当于 double a;

         Voleme v;这里的v的类型,就相当于 double v;

 

注:此方法是从C语言继承而来的方法

using 新类型名 = 已有类型名;

例如:

         using Area = double;这里的Area,就是为double类型新取的类型名称(Area就跟double是一个意思了)

         using Volume = int;这里的Volume,就是为int类型新取的类型名称(Volume就跟int是一个意思了)

 

注:此方法是C++的方法

                                             枚举类型

语法说明

这是枚举常量:

enum 枚举类型名 {值列表}

 

例如:

         enum Weekday {SUN,MON,TUE,WED,THU,ERI,SAT}

注:如果是定义在预处理命令后面的枚举类型就是不限定作用域的枚举类型,如果是定义在类或者方法中的就是局部枚举,是C++从C语言继承过来的枚举类型。

大括号里面这些可取值列表是一些枚举常量,默认情况下SUN=0,MON=1,TUE=2,依次类推SAT=6,

枚举元素是常量。不能对它们赋值

 例如有如下定义:

                              enum Weekday {SUN,MON,TUE,WED,THU,ERI,SAT}就不能在其他位置写赋值表达式:SUN = 0; //SUN是枚举元素所以这个赋值表达式是非法的。

枚举元素具有默认值,它们默认情况下从开始头一个依次为:0,1,2,……n按一去递增。

如果我们不希望它按照默认情况下获取默认值的话,也可以在定义枚举元素的时候给枚举元素指定不同的值。

例如:

         enum Weekday {SUN = 7,MON = 1,TUE,WED,THU,ERI,SAT}

比如说在这个例子里面SUN被赋值为7,MON被赋值为1那么TUE,WED,EHU,ERI,SAT它们的值就会从MON后面依次默认按一去递增,也就是说TUE会默认为3,WED默认为4…………SAT默认为6。

如果说在这个例子里面SUN被赋值为7,MON没有被赋值那么TUE,WED,EHU,ERI,SAT它们的值就会从SUN后面依次默认按一去递增,也就是说MON会默认为8,TUE默认为9…………SAT默认为13。

注:枚举值可以进行关系运算

       我们看到枚举值实际上也就是整数的一个子集,那么它与整数之间是不是可以互通呢?

       我们能用一个整数直接给枚举值赋值吗?答:不可以

       整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,要先进行强制数据类型转换,显式的将整数转换成枚举类型,如果整数在枚举类型的取值范围之内的话转换就会成功,否则的话转换就会失败。.

        枚举值可以给整形变量赋值,因为它是整形的子集,

这是枚举变量:

enum 枚举类型名 变量名;

或者:

         枚举类型名 变量名;;

定义枚举类型名:

                 enum 枚举类型名 {值,或值列表,或者什么都不写};

引用枚举类型名定义枚举变量:

                 枚举类型名 变量名;

为枚举变量初始化:

                 变量名 = 枚举类型名(初始化值);//如果需要其他类型的变量来给枚举赋值那么就需要强制数据类型转换:

                                      枚举类型名(值);这个是强制数据类型转换。

也可以利用static_cast完成转换,这样上面的语句又可以写成:

                                                                                                  static_cast<枚举类型名>(值)

                                         自定义类型关键字

auto val = val1 + val2;

编译器通过初始值自动推断变量的类型

例如:

         auto val = val1 + val2;

如果val1 + val2是int类型,那么val就是int类型

如果val1 + val2是double类型,那么val就是double类型

所以val的类型取决于用来初始化val的表达式的类型

decltype (类型名) 变量名 = 类型表达式;

定义一个变量与某一个表达式的类型相同,但并不用该表达式初始化变量

例如:

          decltype (类型名) 变量名 = 类型表达式;

表示变量名以类型表达式作为初始值,但变量名不会跟之前这个变量名的类型一样而是与decltype (类型名) 括号里的类型名一致。

也就是说如果我们定义一个变量想使用一个类型表达式来初始化,但是并不想取用这个表达式的类型,就可以使用decltype这个关键字

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值