C++之结构体

目录

内容介绍

例题分析

内容介绍

       C++不再需要用typedef的方式定义一个struct,而且在struct里除了可以有变量(成员变量)之外还可以有函数(成员函数)。

#include<iostream>
using namespace std;
struct Point{int x,y;//成员变量Point(int x=0,int y=0):x(x),y(y){}//构造函数 
};
Point operator +(const Point& A,const Point& B){//重载运算符+,结构体加法return Point(A.x+B.x,A.y+B.y);
}
ostream& operator <<(ostream &out,const Point& p){//重载运算符<<out<<"("<<p.x<<","<<p.y<<")";
}
int main(){Point a,b(1,2);a.x=3;cout<<a+b<<"\n";return 0;
}

       例如在上面的这个代码中,结构体Point中定义了一个函数,函数名也叫Point,但是没有返回值,这样的函数称为构造函数。构造函数是在声明变量时调用的,例如,声明Point a,b(1,2)时,分别调用了Point()和Point(1,2)。注意这个构造函数的两个参数后面都有“=0”的字样,其中0是默认值。也就是说,如果没有指明这两个参数的值,就按照0处理,因此Point()相当于Point(0,0)。"x(x),y(y)"是个简单的写法,表示把成员变量x初始化为参数x,成员变量y初始化为参数y,也可以写成:

Point(int x=0,int y=0){this->x=x;this->y=y;
}

       这里的this是指向当前对象的指针,this->x的意思是“当前对象的成员变量x”,即(*this).x。接下来为这个结构体定义了加法,并且在实现中用到了构造函数。这样就可以用a+b的形式计算两个结构体a+b的“和”了。

       C++中的结构体可以有1个或多个构造函数,在声明变量时调用。C++中的函数(不只是构造函数)参数可以拥有默认值。

例题分析

题目

现有N名同学,每名同学需要设计一个结构体记录以下信息:学号、学业成绩和素质拓展成绩、综合分数(实数)。每行读入同学的学号、学业成绩和素质拓展成绩,并且计算综合分数(分别按照70%和30%权重累加),存入结构体中。还需要在结构体中定义一个成员函数,返回该结构体对象的学业成绩和素质拓展成绩的总分。

然后需要设计一个函数,其参数是一个学生结构体对象,判断该学生是否“优秀”。优秀的定义是学业和素质拓展成绩总分大于140分,且综合分数不小于80分。

当然通过本题很容易啦,本题只是为了帮助你训练结构体的使用方法。

本题存在精度误差问题,请将a * 0.7 + b * 0.3与80比较转化为a * 7 + b * 3与800比较。

输入输出格式

输入格式

第一行一个整数N。

接下来N行,每行3个整数,依次代表学号、学业成绩和素质拓展成绩。

输出格式

N行,如果i名学生是优秀的,输出Excellent,否则输出Not excellent

输入输出样例

输入样例

4
1223 95 59
1224 50 7
1473 32 45
1556 86 99

输出样例

Excellent
Not excellent
Not excellent
Excellent

代码

这个题目可以使用上面结构体的知识解决。

#include <iostream>
using namespace std;
struct Student {int id;int academic;int quality;double overall;Student() {}//没有传递参数的初始化构造函数 Student(int _id, int _academic, int _quality) {//初始化构造函数 id = _id;academic = _academic;quality = _quality;overall = 7.0 * _academic + 3.0 * _quality;}int totalScore() {return academic + quality;}bool isExcellent() {return totalScore() > 140 && overall >= 800;}
};
int main() {int N;cin >> N;Student students[N];for (int i = 0; i < N; i++) {int id, academic, quality;cin >> id >> academic >> quality;students[i] = Student(id, academic, quality);//结构体初始化 }for (int i = 0; i < N; i++) {if (students[i].isExcellent()) {cout << "Excellent" << endl;} else {cout << "Not excellent" << endl;}}return 0;
}

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

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

相关文章

自学PyQt6杂记索引

文章目录 📖 介绍 📖🏡 安装 🏡📒 使用 📒📝 QtCore📝 QtGui📝 QtWidgets📝 QToolTip📝 信号和槽📝 QtDBus📝 QtNetwork📝 QtHelp📝 QtXml📝 QtSvg

QT 应用中集成 Sentry

QT 应用中集成 Sentry QT应用中集成 SentrySentry SDK for C/C注册 Sentry 账号QT 应用中集成 Sentry触发 Crash 上报 QT应用中集成 Sentry Sentry 是一个开源的错误监控和日志记录平台&#xff0c;旨在帮助开发团队实时捕获、跟踪和解决软件应用程序中的错误和异常。它提供了…

【ADI 知识库】 AN-1354:集成式ZIF、RF至比特、LTE、广域接收机分析和测试结果

官方链接&#xff1a; https://www.analog.com/cn/resources/app-notes/an-1354.html 简介 本应用笔记参考了3GPP TS 36系列文件和ADI公司的多种数据手册、特性标定报告和实验室测试结果。本文重点关注基于集成式零中频(ZIF)、RF至比特、IC (AD9371)的多载波广域LTE接收机的性…

ICA:独立成分分析

1.意义 两个假设&#xff1a;一个是假设源信号是相互统计独立的,另一个是假设己知源信号的统计分布特征。 另一个假设是信号的非高斯性,现实世界的许多信号,诸如绝大多数的语音信号和图像信号即是服从非高斯分布的这个假设的可应用性,带来了独立成分分析的重要特征,即实际信号的…

关于在Tkinter + Pillow图片叠加中出现的问题

这段时间我一直在尝试对多图层图片进行一个叠加的操作&#xff0c;想用tkinter实现出来&#xff0c;先看错误 这里我其实已经选择了图片&#xff0c;但是发现是ValueError&#xff0c;我尝试断点检测但是也无动于衷&#xff0c;因为设置变量检测的时候发现变量并没有错误&…

【周总结】Programmer‘s weekend routine---First week of February

总结 工作&#xff1a; 参加项目重构方案讨论会议、个人任务计划分期以及工期安排、项目初步重构开发 日常&#xff1a;参加年会&#xff08;阳光普照奖都莫得&#xff09; 2024.2.3 阴 不冷 连着一周的雨&#xff0c;我那袜子挂两三天了还能挤出水。。离谱、莆…

一道超简单的基于动态规划的最长公共子序列算法分析

问题描述 给定两个字符串text1和text2&#xff0c;返回这两个字符串的最长公共子序列&#xff08;LCS&#xff09;的长度。一个字符串的子序列是指这个字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符的相对位置形成的新字符串。&#xff08;例如&am…

linux 文件查看 head 、 cat 、 less 、tail 、grep

查看文件详细信息 stat 文件 cat 》》适合显示小文件【行数比较少】&#xff0c;如果行数较多&#xff0c;屏幕显示不完整&#xff08;如果虚拟操作&#xff0c;是无法上下键的&#xff0c;或者滚动鼠标的&#xff0c;第三方 xsheel&#xff0c;crt 可以方向键查看&#xf…

ep-bg-purple-dark element-plus 不生效

element-plus 官网里面的 Layout 布局中的示例&#xff0c;官方文档中添加类名 class"grid-content ep-bg-purple-dark" 有相应的样式 import element-plus/theme-chalk/index.css //默认css样式 英文 import element-plus/dist/index.css 两…

在Flutter中调用Android的代码

参考 【Flutter 混合开发】嵌入原生View-Android 默认使用Android studio 和 Kotlin 基本配置 创建flutter项目 在终端执行 flutter create batterylevel添加 Android 平台的实现 打开项目下的android/app/src/main/kotlin 下的 MainActivity.kt 文件。 我这里编辑器有…

人工智能深度学习发展历程-纪年录

前言 为了理解模型之间的改进关系、明确深度学习的发展目标、提高自身对模型的深度理解、贯彻爱与和平的理念。总之&#xff0c;我做了如下表格。 时间 重大突破 模型改进 详细信息 1847 SGD 随机梯度下降 1995 SVM 支持向量机 1982 RNN 循环神经网络&#xff0c;…

烽火传递

看似很简单的单调队列优化DP 但是如果状态是表示前\(i\)个烽火台被处理完的最小代价(即不知道最后一个烽火台在哪里)就无法降低复杂度 因为假设你在区间\([i-m1,i]\)中枚举最后一个烽火台(设为\(k\))&#xff0c;你前面的状态并不是\(f[k-1]\)&#xff0c;因为此时\(k\)已经可以…

C++之std::tuple(一) : 使用

相关系列文章 C之std::tuple(一) : 使用 C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二)&#xff1a;深入剖析 目录 1.简介 2.创建元组 2.1.直接初始化方式 2.2.使用花括号初始化列表方式&#xff08;C11及以上版本&#xff09; 2.3.make_tuple方式 2.4.使…

Log4j2-27-log4j2 与 springboot 整合例子

1.去除默认的依赖并导入log4j2、lombok依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><!-- 引入log4j日志时需去掉默认的logback --><exclusion>&…

【类和对象】4

日期类的拓展 c语言中的printf函数只能打印内置类型&#xff0c;为了弥补这一不足&#xff0c;c利用运算符重载可以打印自定义类型。 void operator<<(ostream&out);//声明在date.h中void Date::operator<<(ostream& out)//定义在date.cpp中 {out<<…

IBOS靶场搭建流程(超详细)

IBOS 1.下载并安装IBOS 点击然后一直下一步进行安装IBOS 显示出这个时证明安装成功 然后进行数据库的搭建&#xff0c;这里需要说明的是这里运行的服务是nginx和mysql而不是apache和mysql所以说这里的数据库名默认是root且密码也默认是root点击立即安装 安装后出现 这个页面时…

Unity_颜色空间GammaLinear

Unity_颜色空间Gamma&Linear 1: Unity颜色空间的选择对于效果的影响具体有多大? 在ProjectSetting -> Player -> OtherSetting -> Rendering设置下的颜色空间选项卡选择颜色空间进行设置: 太深奥的解释一时半会看不懂,找见一个粗浅的对比,当然本人未做验…

算法价值1-时间复杂度

时间复杂度是算法运行时间相对于输入规模的增长率。它是对算法性能的一种度量&#xff0c;通常用大O符号&#xff08;O&#xff09;表示。 下面是一些常见时间复杂度的例子&#xff1a; 1. O(1) - 常数时间复杂度 表示算法的运行时间是一个常数&#xff0c;与输入规模无关。例…

数据结构中线性结构有哪些

在数据结构中&#xff0c;线性结构是一种有序的数据元素集合&#xff0c;其中数据元素之间存在一对一的线性关系。常见的线性结构包括&#xff1a; 线性表&#xff1a;线性表是最基本、最简单的一种线性结构&#xff0c;它由多个元素组成&#xff0c;每个元素可以有不同的数据类…

GPGPU面临的工程困境闲聊

作者&#xff1a;蒋志强 本人同意他人对我的文章引用&#xff0c;但请在引用时注明出处&#xff0c;谢谢&#xff0e;作者&#xff1a;蒋志强 0.前言 2007年作为GPGPU的工程界元年至今&#xff0c;已经发展了接近小二十年了。这个领域是如此的重要&#xff0c;几乎影响了工业…