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;
}

相关推荐

  1. C++结构

    2024-02-03 14:10:02       48 阅读
  2. C语言结构

    2024-02-03 14:10:02       43 阅读
  3. C++结构初始化使用总结

    2024-02-03 14:10:02       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-03 14:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-03 14:10:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-03 14:10:02       82 阅读
  4. Python语言-面向对象

    2024-02-03 14:10:02       91 阅读

热门阅读

  1. kingbase配置SSL双向认证

    2024-02-03 14:10:02       54 阅读
  2. GMSSL之ZUC256算法

    2024-02-03 14:10:02       54 阅读
  3. cortexM c语言和汇编嵌套编程

    2024-02-03 14:10:02       50 阅读
  4. linux下使用swap分区扩展内存

    2024-02-03 14:10:02       52 阅读
  5. 【DouYing Desktop】

    2024-02-03 14:10:02       43 阅读
  6. 鸿蒙设置沉浸式状态栏、全屏、获取导航栏高度

    2024-02-03 14:10:02       205 阅读