C++之结构体初始化10种写法总结(二百六十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:C++之结构体初始化10种方式总结

2.C++中的结构体(struct)和类(class)区别

  • C++中的结构体(struct)和类(class)是两种用于封装数据和相关操作的复合数据类型。尽管它们在许多方面相似,但它们在C++中的使用和设计理念上存在一些关键差异。

  • 首先,从语法角度看,结构体和类的基本定义形式非常相似。它们都允许我们定义数据成员(即变量)和成员函数(即函数),以便我们可以对数据进行操作。然而,在C++中,结构体默认是公有(public)的,这意味着其成员默认是公开的,可以直接访问。相反,类默认是私有的(private),这意味着其成员默认是隐藏的,需要通过公有成员函数进行访问。

  • 这种默认访问权限的差异反映了结构体和类在C++中的设计理念。结构体通常被用于将一组数据聚合在一起,形成一个逻辑上的整体,这些数据成员通常是可以直接访问的。而类则更强调封装和隐藏内部状态,通过公有成员函数提供对内部数据的访问和操作,从而保护数据的完整性和安全性。

  • 此外,类还提供了更多的特性,如继承、多态和模板等,这些特性使得类在构建大型、复杂的软件系统时更加灵活和强大。结构体虽然也可以实现一些基本的封装和抽象,但在这些高级特性上则显得力不从心。

  • 总的来说,结构体和类在C++中都是用于封装数据和操作的复合数据类型,但它们在默认访问权限、设计理念以及提供的特性上存在差异。选择使用结构体还是类,应根据具体的应用场景和需求来决定。对于简单的数据聚合,可以使用结构体;对于需要更复杂封装和抽象的场景,则应使用类。

3.代码实例

<1>.直接初始化

struct MyStruct {
    int x;
    double y;
};

MyStruct s1 = {10, 3.14};

<2>.使用成员初始化列表

struct MyStruct {
    int x;
    double y;
};

MyStruct s2 = { .x = 10, .y = 3.14 };

<3>.默认初始化并逐个赋值

struct MyStruct {
    int x;
    double y;
};

MyStruct s3;
s3.x = 10;
s3.y = 3.14;

<4>.使用构造函数初始化

struct MyStruct {
    int x;
    double y;
    MyStruct(int a, double b) : x(a), y(b) {}
};

MyStruct s4(10, 3.14);

<5>.使用默认构造函数初始化

struct MyStruct {
    int x;
    double y;
};

MyStruct s5{};
s5.x = 10;
s5.y = 3.14;

<6>.使用列表初始化

struct MyStruct {
    int x;
    double y;
};

MyStruct s6{};
s6 = {10, 3.14};

<7>.使用无名称的临时结构体对象

struct MyStruct {
    int x;
    double y;
};

MyStruct s7 = MyStruct{10, 3.14};

<8>.使用emplace_back()

struct MyStruct {
    int x;
    double y;
};

std::vector<MyStruct> vec;
vec.emplace_back(10, 3.14);

<9>.使用std::make_pair()

struct MyStruct {
    int x;
    double y;
};

std::pair<int, double> p = std::make_pair(10, 3.14);
MyStruct s8 = {p.first, p.second};

<10>.使用memcpy()

struct MyStruct {
    int x;
    double y;
};

MyStruct s9;
int tempX = 10;
double tempY = 3.14;
std::memcpy(&s9, &MyStruct{tempX, tempY}, sizeof(MyStruct));

<11>.使用无名称的临时结构体对象实例代码 V1.0

#include <iostream>
using namespace std;

struct BinderHandle1 {
  int32_t handle;
};

class BpBinder1 {
public:
  BpBinder1(BinderHandle1 handle) {
    this->handle = handle;
  }
private:
  BinderHandle1 handle;
};

struct BinderHandle2 {
  int32_t handle;
  string data;
};

class BpBinder2 {
public:
  BpBinder2(BinderHandle2 handle) {
    this->handle = handle;
  }
private:
  BinderHandle2 handle;
};

int main() {
  int handle = 100;
  BpBinder1 *bp = new BpBinder1(BinderHandle1{handle});
  delete bp;

  BpBinder2 *bp2 = new BpBinder2(BinderHandle2{handle,"124"});  
  return 0;
}

<11>.使用无名称的临时结构体对象实例代码 V2.0

#include <iostream>
using namespace std;

struct BinderHandle2 {
  int32_t handle;
  string data;
};

class BpBinder2 {
public:
  BpBinder2(BinderHandle2 handle) {
    this->handle = handle;
    printf("xxx--------------->%s(), line = %d, handle = %d\n",__FUNCTION__,__LINE__,this->handle.handle);
    printf("xxx--------------->%s(), line = %d, data = %s\n",__FUNCTION__,__LINE__,this->handle.data.c_str());
  }
private:
  BinderHandle2 handle;
};

int main() {
  int handle = 100;
  BpBinder2 *bp2 = new BpBinder2(BinderHandle2{handle,"124"});

  delete bp2;
  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/512023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据毕业设计hadoop+spark旅游推荐系统 旅游可视化系统 地方旅游网站 旅游爬虫 旅游管理系统 计算机毕业设计 机器学习 深度学习 知识图谱

基于hive数据仓库的贵州旅游景点数据分析系统的设计与实现 摘 要 随着旅游业的快速发展和数字化转型&#xff0c;旅游数据的收集和分析变得越来越重要。贵州省作为一个拥有丰富旅游资源的地区&#xff0c;旅游数据的分析对于促进旅游业的发展和提升旅游体验具有重要意义。基…

Redis分布式锁的优化

分布式锁 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的实现 分布式锁的核心是实现多进程之间互斥&#xff0c;而满足这一点的方式有很多&#xff0c;常见的有三种&#xff1a; MySQLRedisZookeeper互斥利用mysql本身的互斥锁机制利…

LangChain-03 astream_events 流输出

内容简介 尝试用 FAISS 或 DocArrayInMemorySearch 将数据向量化后检索astream_events 的效果为 |H|arrison| worked| at| Kens|ho|.|| 安装依赖 # 之前的依赖即可 pip install --upgrade --quiet langchain-core langchain-community langchain-openai # Win或Linux用户可…

摸鱼toyaml.com更新

摸鱼https://toyaml.com/windowsupdate.html

一次MySQL事务的旅程:Buffer Pool, Binlog, Redo Log揭秘

MySQL中的各种Buffer和Log以及表空间 MySQL中一次事务涉及了各种Buffer,Log和表空间&#xff0c;主要涉及&#xff1a;Buffer Pool, Binlog, Undo Log, Redo Log以及表空间。 我们来探讨下。 Buffer Pool Buffer Pool主要存放在内存中&#xff0c;它是一个缓存区域&#xf…

36---USB HUB电路设计

视频链接 USB HUB电路设计01_哔哩哔哩_bilibili USB HUB 电路设计 1、USB HUB基本介绍 USB Hub&#xff0c;指的是一种可以将一个USB接口扩展为多个&#xff0c;并可以使这些接口同时使用的装置。 Hub也是大家常说的集线器&#xff0c;它使用星型拓扑结构连接多个USB接口设…

【御控物联】JavaScript JSON结构转换(17):数组To对象——键值互换属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、核心构件之转换映射三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…

vue 条件渲染、列表循环渲染、事件绑定 初探第三天

条件渲染 <script>const app Vue.createApp({data(){return {show:true,conditionOne: false,conditionTwo: true,}},template:<div v-if"show"> hello word </div><div v-if"conditionOne"> if </div><div v-else…

HWOD:将字符串中的数字用*括起来

一、知识点 当需要类似括号( )这样成对出现的字符时&#xff0c;可以通过设置flag来标示 比如flag等于0表示前面所有的括号都是成对的 flag等于1表示最靠近的括号是未成对的&#xff1b;满足条件时&#xff0c;补齐括号&#xff0c;使其成对&#xff0c;flag置0 二、题目 …

如何展示科技产品的原理和应用

一、合理安排展示区域 不同的科技产品具有不同的展示需求&#xff0c;设计师需要根据展品的特点和大小&#xff0c;合理安排展示区域。对于较大的科技产品&#xff0c;可以设置特定的展台或展示区域&#xff0c;并配备合适的灯光和装饰&#xff0c;以凸显产品的重要性和独特性。…

matlab实现决策树可视化——信息增益、C4.5、基尼指数

代码&#xff1a;https://download.csdn.net/download/boyas/89074326

第十五章 Nginx

一、Nginx 1.1 Nginx 相关概念 1.1.1 正向代理 正向代理类似一个跳板机&#xff0c;代理访问外部资源。 比如我们国内访问谷歌&#xff0c;直接访问访问不到&#xff0c;我们可以通过一个正向代理服务器&#xff0c;请求发到代理服&#xff0c;代理服务器能够访问谷歌&am…

iOS开发进阶(十三):脚手架创建iOS项目

文章目录 一、前言二、xcode-select 命令三、拓展阅读 一、前言 项目初期&#xff0c;需要搭建项目基本框架&#xff0c;为此离不开辅助工具&#xff0c;即脚手架。当然&#xff0c;IDE也可以实现新建空白项目&#xff0c;但是其新建后的项目结构可能不符合预期设计&#xff0…

【论文阅读】Transformer 论文逐段精读

Transformer 论文逐段精读【论文精读】 文章目录 Transformer 论文逐段精读【论文精读】&#x1f4dd;摘要&#x1f4dc;结论&#x1f4cc;引言⏱️相关工作⭐模型Overview3.1 Encoder and Decoder Stacks3.2 Attention3.2.1 Scaled Dot-Product Attention3.3.2 Multi-head att…

如何系统地自学Python

1、如何系统地自学Python 小白的话可以快速过一下某马&#xff0c;某谷。 主要关注Python有什么集合&#xff0c;里面的集合怎么使用 然后再找一个Python爬虫实战视频&#xff0c;先跟着视频敲一遍代码&#xff0c;然后再尝试自己做一遍 然后再找一个Python服务开发视频&am…

FPGA + 图像处理 (二) RGB转YUV色域、转灰度图及仿真

前言 具体关于色域的知识就不细说了&#xff0c;简单来讲YUV中Y通道可以理解为就是图像的灰度图&#xff0c;因此&#xff0c;将RGB转化为YUV是求彩色图的灰度直方图、进行二值化操作等的基础。 HDMI时序生成模块 这里先介绍一下仿真时用于生成HDMI时序&#xff0c;用这个时…

Flutter 开发学习笔记(4):widget布局容器学习

文章目录 前言相关链接Widget 有状态和无状态Flutter 代码风格去掉烦人的括号后缀提示代码缩进 Flutter 布局最简单的布局widgets和Material widgets Dark语法习惯Flutter 布局默认布局Center居中Padding 填充Align对齐默认居中顶部底部右上角 通用 WidgetContainer处于性能原因…

波奇学Linux:tcp滑动窗口

连接建立成功和上层有没有accept没有关系 listen的第一个参数为1&#xff0c;建立的连接数量为2 操作系统底层用队列来管理建立的连接&#xff0c;上层用accept来获取链接 blacklog1 表示底层已经建立好的连接队列的最大长度 超过最大长度的连接&#xff0c;服务端不会丢弃…

STM32CubeMX配置步骤详解零 —— 引言

引子 初识 笔者接触STM32系列MCU有些年头了。初次接触是2015年&#xff0c;那时是在第二空间&#xff08;北京&#xff09;科技有限公司上班&#xff0c;是以STM32F407&#xff08;后缀好像是RGT6或ZGT6&#xff0c;记得不是很清楚了&#xff09;为主芯片做VR头戴式设备&…

SpringBoot整合Activiti7——实战之出差流程(分支)

文章目录 代码实现部署流程启动流程查询任务填写出差审批单经理审批xml文件 出差流程&#xff1a;开始 - 填写出差表单 - 判断&#xff08;出差天数大于等于5&#xff09;- 副经理审批 - 否则总经理审批 - 完成 代码实现 部署流程 Testpublic void testDeployProcess() throws …