C++结构(OOP的基石)

news2024/9/19 14:43:03

写在前面

  • 面向初学者撰写专栏,个人原创的学习C/C++笔记(干货
  • 所作源代码输出内容为中文,便于理解
  • 如有错误之处请各位读者指正
  • 请读者评论回复、参与投票,反馈给作者,我会获得持续更新笔记干货的动力。

致粉丝:可以在阅读完我的文章后,自己尝试写一点原创心得(哪怕一行字也好)。
               希望众(尽管717个🤣)粉丝多多支持、浏览、自我创作@_@


知识点概览 

目录

写在前面

知识点概览 

一.结构简介

二.结构的创建、描述、声明与赋值

1.关键字struct

2.描述自定义结构的格式(在main函数外)

3.给新的结构命名、赋值(一般在main函数内)

4.注意

三.结构的使用

 结语

一.结构简介

  1. 可以存储多种类型数据的存储单元
  2. 结构可以自定义,定义类型后就可以创建这种类型的变量
  3. 创建结构的步骤 :先定义结构描述(描述标记结构中不同的数据类型),再按照描述来创建结构变量(结构数据对象)

二.结构的创建、描述、声明与赋值

1.关键字struct

struct 关键字告诉编译器要创建结构布局。

2.描述自定义结构的格式(在main函数外)

struct CandyBar//结构类型的变量CandyBar,描述包含的数据类型
{
    char name[20];//char数组(字符串),品牌
    double weight;//double数,重量
    int calorie;//int整型,卡路里
};
//int main(){return 0;}

如上。

具体格式:
struct 自定义结构类型的名称
{
        数据类型 名称;
        数据类型 名称;
        数据类型 名称;
        ...
};

//int main(){return 0;}

3.给新的结构命名、赋值(一般在main函数内)

//设置结构类型CandyBar名下的变量,给结构类型CandyBar名下的变量赋值,这时可以省略struct
CandyBar snack =
{
    "Mocha Munch",//结构中描述的name类char数组
    2.3,          //结构中描述的weight类double浮点数
    350           //结构中描述的calorie类int整数
};//snack是一个CandyBar类的struct结构

CandyBar snack2 = { "Baby Bear", 1.2, 280};//此处仅作展示,实际程序中不需要
//snack2是一个CandyBar类的struct结构

如上。

具体格式:
已经描述好的自定义结构的名称 要使用的新的该类型的变量 =
{
        与前面描述类型相符合的具体数值或内容,
        与前面描述类型相符合的具体数值或内容,
        与前面描述类型相符合的具体数值或内容
        ...
};

4.注意:

  • 结构是一种数据格式,struct是告诉编译器这是结构布局的关键字,struct 后面的是自定义的结构类型,不同的结构类型对应不同的类型名字。例如,结构 CandyBar 类型包含char、double、int等数据类型,而可以描述另一种结构,自定义名字,可以叫它 Meat ,里面可以包含char、float、long int等数据类型。所以,结构的数据格式在描述时统一,但是描述不同的类型有不同的类型名字,不同的结构类型包含不同的数值类型(int、float、char等) 。
    如图:

    简言之,struct叫结构,CandyBar、Meat叫做结构类型,snack和snack2是结构类型CandyBar的变量,name是结构类型CandyBar中第一种数值类型char的名字,"Mocha Munch"是结构类型CandyBar变量snack中的,char数组name的实际值,可以用snack.name来访问内容。
  • 使用结构类型时,CandyBar名下有一个叫做snack的单元,存储对应实际数值,另一个叫做snack2的单元,存储相同类型格式但实际值不同的数值。
  • 比喻:struct城市有2个小区,一个CandyBar小区,一个Meat小区,CandyBar小区有2栋单元楼,单元楼都有3层,不同楼层装修不同,但是每栋单元楼的1楼门牌号都叫name,2楼门牌号都叫weight,3楼门牌号都叫calorie。
  • 1号单元楼snack一楼住着"Mocha Munch",二楼住着2.3,三楼住着350。
  • 2号单元楼snack2一楼住着"Baby Bear",二楼住着1.2,三楼住着280。
  • 其它单元楼没建好,没给名字。

  • Meat小区空荡荡,啥也没有。

  • struct关键字在C++中描述结构时不能省略,但在结构已经描述好,对其中的具体内容对应赋值时可以省略。
  • 使用已经描述好的结构类型时,要与描述中的数值类型一 一对应,并且每个都赋值。
  • 给结构类型赋值时,必须要在结构类型名后面+结构类型变量名,再加=和{},大括号中对应值后面有逗号隔开,最后一个值赋完不用逗号,大括号赋值完要加结束标记分号; 

三.结构的使用

#include<iostream>
using namespace std;
struct CandyBar//结构类型的变量CandyBar,描述包含的数据类型
{
    char name[20];//char数组(字符串),品牌
    double weight;//double数,重量
    int calorie;//int整型,卡路里
};
int main()
{
    //设置结构类型CandyBar名下的变量,给结构类型CandyBar名下的变量赋值,这时可以省略struct
    CandyBar snack =
    {
        "Mocha Munch",//结构中描述的name类char数组
        2.3,          //结构中描述的weight类double浮点数
        350           //结构中描述的calorie类int整数
    };//snack是一个CandyBar类的struct结构

    CandyBar snack2 = { "Baby Bear", 1.2, 280};//此处仅作展示,实际程序中不需要
    //snack2是一个CandyBar类的struct结构

    cout << "糖果品牌:" << snack.name<<endl;
    //访问结构类型CandyBar名下,变量snack中的name类的值。未使用指针转型。
    cout << "糖果重量(kg):" << snack.weight << endl;
    cout << "糖果卡路里含量:" << snack.calorie << endl;

    return 0;
}

如代码所示。与访问类成员时的操作相似,使用结构类型CandyBar变量snack加点号.加结构类型中对应的数值类型名来访问,例如:snack.name指向实际值"Mocha Munch"。


 结语

今天我们共同学习了 C++ 结构的描述、声明与赋值、使用等重要知识。
学习编程是一条漫长的路,贵在坚持。每天学习来提升自己的的编程能力,成为耀眼的IT之星。
各位读者跟随我的脚步,我们共同努力,共同进步吧!

返回作者主页

 专栏下一篇文档:C语言求幂运算(尽大支持)——中文式奇特命名

专栏下一篇文档:简洁易懂地介绍C++参数

其它文章:C++学习/温习笔记:源码学编程(一)(优质好文)

                  学习C++基本数值类型 

                  C/C++基础运算符


 如有探讨问题联系邮箱:yhlz0613@163.com

对于文章中的错误请各位批评指正,我一定及时更正

请在投票后评论回复意见,如有关于写博文的指导也请您回复提出

 <!--感谢浏览                    诸君慢行且留言          过客匆匆常回访-->

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vulnhub之VENOM:1

1.信息收集 输入arp-scan 192.168.239.0/24探测存活的IP 使用nmap对192.168.239.166进行扫描&#xff0c;发现IP端口21、80、139、443、445。 在浏览器上访问http://192.168.239.166/&#xff0c;查看源码发现类似md5加密。 解密md5可以得到为hostinger。 输入enum4linux …

Linux | 软件包管理器——yum的使用

文章目录一、什么是软件包二、有关软件使用的背景讲解1、如何去下一个软件呢&#xff1f;过程是怎样的&#xff1f;2、软件的商业利益分析3、Linux开源社区的生态链4、Linux中软件的分类和选择三、yum的使用1、说在前面【注意事项】2、如何查看软件包3、软件的安装和卸载四、yu…

WPF鼠标、键盘、拖拽事件、用行为封装事件

WPF鼠标、键盘、拖拽事件、用行为封装事件 本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项&#xff0c;同时使用一个案例讲解了拓展事件。除此之外&#xff0c;本文还讲述如何用行为&#xff08;Behavior&#xff09;来封装事件。 Windows中的事件通过消息机制来完…

新手利用Git上传项目代码到Gitee仓库

【本文发布于https://blog.csdn.net/Stack_/article/details/128770678&#xff0c;未经许可禁止转载&#xff0c;转载须注明出处】 一、安装git工具 【git下载】 【git插件以及插件汉化包下载】 官网下载很慢&#xff0c;已上传CSDN。跳转 或者百度云 链接&#xff1a;https:…

下拉列表支持多选

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>下拉列表支持多选</title> </head> <body bgcolor"antiquewhite"> <center> <…

【算法基础】二分查找算法

一、二分查找算法原理 1. 算法介绍 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后…

github codespace进行npm start运行开发服的时候无法显示页面(白屏)

github codespace进行npm start运行开发服的时候无法显示页面解决方案 先说答案 必须要指定host为0.0.0.0&#xff0c;因为一般前端开发的时候都是本地访问的&#xff0c;所以npm start 默认启动一个开发服&#xff0c;监听127.0.0.1的请求&#xff0c;也就是localhost。但是…

《Spring揭秘》读书笔记 3:Spring MVC

22 迈向Spring MVC的旅程 【参考】Java Web开发历程。 1) Servlet独行天下的时代。 一个Servlet对应处理一个Web请求。Servlet什么都做。 2) 繁盛一时的JSP时代。 将Servlet中的视图渲染逻辑以独立的单元抽取出来&#xff0c;JSP成为Java Web应用程序事实上的模板化视图标准…

Golang 使用Gin创建Restful API

Golang 使用Gin创建Restful API 今天学习下Go语言如何集成Gin框架编写Restful Web API的基本操作。Gin框架简化了Go原生语言构建Web应用程序的复杂度&#xff0c;在今天的学习中&#xff0c;将学会使用Gin构建路由请求、数据检索、JSON响应封装等最简单的Web服务。 基本要求 …

将本地txt文件上传至mysql

文章目录单个文件导入1.创建数据库和数据表2.使用cmd各种情况说明如果报错方案一方案二方案三mysql重启命令重启&#xff1a;图形页面重启当txt文件中的数据量太多时&#xff0c;不再适合用sql语句插入&#xff0c;这里介绍讲本地txt文件导入到mysql中 单个文件导入 如图所示…

【Maven】私服

目录 1. 私服介绍 问题导入 1.1 介绍 1.2 Nexus安装与启动 1.3 私服资源操作流程分析 2. 私服仓库分类 问题导入 3. 资源上传与下载 问题导入 3.1 从私服中下载依赖 3.2 上传依赖到私服中 1. 私服介绍 问题导入 这里的私服和平时我们听的国服、体验服、欧服等等有…

《深入浅出计算机组成原理》学习笔记 Day12

数据通路&#xff08;上&#xff09;1. 指令周期&#xff08;Instruction Cycle&#xff09;2. 建立数据通路3. CPU 所需要的硬件电路4. 总结参考1. 指令周期&#xff08;Instruction Cycle&#xff09; 计算机每执行一条指令的过程&#xff0c;可以分为这几个步骤&#xff1a…

MySQL三大日志

MySQL三大日志包括&#xff1a;undolog&#xff0c;redo log&#xff0c;binlog&#xff0c;它们分别有以下作用&#xff1a; undolog&#xff1a;是Innodb存储引擎生成的日志。用于事务的回滚和MVCC&#xff0c;保证了事务的原子性。 redo log&#xff1a;是Innodb存储引擎生…

【汇编】深入浅出地讲解使用六条汇编指令解决大部分汇编代码

开发环境说明 本文采用的IDE为keil5&#xff0c;核心板为STM32F103ZE。 在keil中添加以下两条语句即可生成汇编代码&#xff1a; 在上图界面中添加下述两句代码即可生成汇编代码&#xff1a;fromelf --bin --outputtest.bin Objects\test.axffromelf --text -a -c --outputtest…

使用Facebook分析跟踪SEO进展

Facebook是一个强大的社交平台&#xff0c;在这里你可以获取关于你的业务或客户的各种信息。它为你提供了一个巨大的渠道来展示你在过去一年中对行业或公司做出的贡献&#xff0c;以及你如何改进和优化我们所做的事情。如果不知道如何利用 Facebook来获得更多关于 SEO工作的信息…

高级数据结构:线段树入门(c++实现 + 详解)

文章目录线段树概念区间最值问题辅助函数创建线段树查询更新懒惰修改&#xff08;查询&#xff09;问题tag标记设计改进的更新函数关于本节的全部源代码线段树概念 线段树是一种高级数据结构&#xff0c;与树状数组一样&#xff0c;被用来处理区间查询&#xff0c;修改问题&am…

DDOS渗透与攻防(一)之拒绝服务攻击概念介绍

DDOS渗透与攻防 前言 DOS(Denial of Service&#xff0c;拒绝服务攻击)&#xff0c;它的原理很简单&#xff0c;就是用我们手里的机器去给服务器发请求&#xff0c;如果我们手头的服务器各方面性能都比服务器的主机的性能好&#xff0c;那么当我们发送大量请求给服务器&#…

Day871.行锁 -MySQL实战

行锁 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于行锁的内容。 MySQL 的 行锁 是在引擎层由各个引擎自己实现的。 但并不是所有的引擎都支持行锁&#xff0c;比如 MyISAM 引擎就不支持行锁。 不支持行锁意味着并发控制只能使用表锁&#xff0c;对于这种引擎的…

普通话学习

一、认识韵母是有四个声调的发错的字和音总结R&#xff1a;日、热、肉L&#xff1a;漏、乐参考&#xff1a;https://zhuanlan.zhihu.com/p/34571271身体&#xff08;shen-1&#xff09;森&#xff08;sen-1&#xff09; 生日&#xff08;sheng-1&#xff09;琴&#xff08;qin-…

k8s对接smb/cifs存储

之前文章提到&#xff0c;k8s官方是支持nfs存储的&#xff0c;那么在windows常见的文件共享协议是否也支持呢。答案是肯定的。不过支持的方式是通过CSI接口进行支持的。官方提供的项目是csi-driver-smb官网&#xff1a;https://github.com/kubernetes-csi/csi-driver-smb安装cu…