当前位置: 首页 > news >正文

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) 。

http://www.lryc.cn/news/399733.html

相关文章:

  • 乡镇集装箱生活污水处理设备处理效率高
  • 计算机网络高频面试题
  • 进程通信(1):无名管道(pipe)
  • YOLOv10改进 | 损失函数篇 | SlideLoss、FocalLoss、VFLoss分类损失函数助力细节涨点(全网最全)
  • 【数组、特殊矩阵的压缩存储】
  • Flat Ads:金融APP海外广告投放素材的优化指南
  • DBA 数据库管理 表管理 数据批量处理。表头约束
  • C# 上位机开发之旅-委托事件的那些事[2]
  • 浏览器出现 502 Bad Gateway的原理分析以及解决方法
  • Java的高级特性
  • pip install selenium异常
  • 应急响应总结
  • 一些资源(●ˇ∀ˇ●)
  • WGCLOUD的ping设备监测可以导入excel数据吗
  • vue 画二维码及长按保存
  • IDEA中Git常用操作及Git存储原理
  • 人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解
  • 智能制造热点词汇科普篇——工业微服务
  • FastGPT+OneAI接入网络模型
  • Java核心篇之JVM探秘:内存模型与管理初探
  • 未来互联网的新篇章:深度解析Facebook的技术与战略
  • MySQL卸载 - Windows版
  • Java核心篇之JVM探秘:对象创建与内存分配机制
  • Nuxt框架中内置组件详解及使用指南(五)
  • python开发遇到的坑汇总
  • 【线性表,线性表中的顺序表和链表】
  • 46 mysql 客户端拿不到具体的错误信息
  • Java语言程序设计——篇三(2)
  • 如何实现一个分布式锁
  • Ajax从零到实战