C++之复合资料型态KU网址第二部V蒐NAY3989

结构

结构可存放不同资料型态的数值,例如

#include <iostream>
  
struct Demo {
    int member1;
    char *member2;
    float member3;
};

int main() {
    Demo d;
    d.member1 = 19823;
    d.member2 = "203";
    d.member3 = 3.011;
    
    std::cout << "member1: " << d.member1 << std::endl;
    std::cout << "member2: " << d.member2 << std::endl;
    std::cout << "member3: " << d.member3 << std::endl;
    
    return 0; 
}

第3 行定义一个结构,使用关键字 struct,其后为结构的识别字名称,后面的大括弧宣告结构的成员(member) 。此例的Demo有3 个成员,分别属于int、char *与float

struct Demo {
    int member1;
    char *member2;
    float member3;
};

设定或存取结构的成员可利用小数点运算子 .,此例编译执行结果如下

$ g++ u0705_1.cpp
$./a.out 复制代码
会员1:19823
成员2:203
会员3:3.011
$

若结构的成员为指标,就得利用->运算子存取。

结构其实是预设为public的类别(class) ,因此可加入成员函数(member function) ,例如我们替Demo增加一个member4()

#include <iostream>
  
struct Demo {
    int member1;
    float member2;
    char *member3;
    
    void member4();
};

void Demo::member4() {
    std::cout << "Do something!" << std::endl;
}

int main() {
    Demo d;
    d.member4(); 
    
    return 0;
}

呼叫成员函数同样用小数点运算子,编译执行结果如下


$ g++ u0705_2.cpp
$./a.out 复制代码
做一点事!
$

联合

联合可存放不同资料型态的数值,但是只能有一个成员(member) 被赋值,例如

#include <iostream>
  
union Demo {
    int member1;
    float member2;
    char *member3;
};

int main() {
    Demo d;
    d.member1 = 1;
    d.member2 = 2.0;
    d.member3 = "3";
    
    std::cout << "member1: " << d.member1 << std::endl;
    std::cout << "member2: " << d.member2 << std::endl;
    std::cout << "member3: " << d.member3 << std::endl;
    
    return 0; 
}

第3 行定义一个联合,使用关键字 union,其后为联合的识别字(identifier) 名称,后面的大括弧宣告联合的成员。此例的Demo有3 个成员,分别属于int、float与char 指标

#include <iostream>
  
union Demo {
    int member1;
    float member2;
    char *member3;
};

设定或存取联合的成员可利用小数点运算子 .,此例编译执行结果如下

$ g++ u0706.cpp
$./a.out 复制代码
会员1:124833572
成员2:1.81165e-34
成员3:3
$

我们可以看到只有member3的值是正常的,其他member1与member2由于变成未定义的值,因此印出来的是记忆体位址的残值。

联合其实是一种节省空间的类别(class) ,也可以嵌入类别中当巢状联合(nested union) 或匿名联合(anonymous union) 。

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值