一叶枫残 发表于 2021-2-8 18:24:18

C++(11th) :union, enum

本帖最后由 一叶枫残 于 2021-2-9 19:53 编辑

联合
联合类型的定义方式与创建和结构体类型一样,只不过把 struct 改为 union
对于联合类型,可以创建不同的类型的变量,但它们的地址相同,意味着他们之中有一个的值发生改变,其余变量储存的值也会发生改变;
#include <iostream>

using namespace std;

union IFT
{
        int it;
        char c;
        float flt;
};

int main()
{
        IFT ift_1;
       
        cout << "ift_1.it的地址:" << &( ift_1.it )        << endl;
        cout << "ift_1.c的地址:" << (void*)&( ift_1.c ) << endl;
        cout << "ift_1.flt的地址:" << &( ift_1.flt ) << endl << endl;
       
        ift_1.it = 54;
        cout << "ift_1.it:" << ift_1.it        << endl;
        cout << "ift_1.c:" << ift_1.c << endl;
        cout << "ift_1.flt:" << ift_1.flt << endl << endl;
       
        ift_1.c = '3';
        cout << "ift_1.c:" << ift_1.c << endl;
        cout << "ift_1.it:" << ift_1.it << endl;
        cout << "ift_1.flt:" << ift_1.flt << endl;
       
        return 0;
}
ift_1.it的地址:0x70fe00
ift_1.c的地址:0x70fe00
ift_1.flt的地址:0x70fe00

ift_1.it:54
ift_1.c:6
ift_1.flt:7.56701e-044

ift_1.c:3
ift_1.it:51
ift_1.flt:7.14662e-044
在赋值给变量c之后,it的值发生了改变,变为3的ascii码,这就是地址相同造成的结果,同时flt的值也发生了影响(即使没有被赋值过);

枚举类型
定义枚举类型使用enum,后面空格跟类型名以及中括号里面的值,创建枚举类型与创建联合类型和结构体一样,使用类型名加变量名,这个变量名只能取中括号里面的值(取其他值会报错);
#include <iostream>

using namespace std;

int main()
{
        enum mood{ happy , sad , angry};
       
        mood me;
        me = sad;
        cout << "me:" << me << endl;
       
        me = angry;
        cout << "me:" << me << endl;
       
        return 0;
}
me:1
me:2
枚举类型的输出结果为在中括号内的排名顺序,从0开始,赋值时如sad不用加双引号;

同时,中括号里的类型可以直接输出,我们在上面程序加上
cout << "happy:" << happy << endl;
输出结果为
happy:0
枚举类型可以配合swich语句使用;


页: [1]
查看完整版本: C++(11th) :union, enum