一个 Student 结构体的简单封装

一个 Student 结构体的简单封装
前几天写练习的时候顺手把学生相关的数据塞进了一个结构体连输入和判断逻辑也一起扔进去了。这种写法在代码量不大、逻辑简单的时候挺方便不用到处找 cin 和 cout也不会把主函数搞得一团乱。结构体长这样struct Student { int id; double s1, s2, s3; void input() { std::cout 请输入学号: ; std::cin id; std::cout 请输入成绩 s1: ; std::cin s1; std::cout 请输入成绩 s2: ; std::cin s2; std::cout 请输入成绩 s3: ; std::cin s3; } bool judge(double threshold 60.0) const { return s1 threshold s2 threshold s3 threshold; } };三个成员变量id 是整型s1、s2、s3 是 double分别存学号和三科成绩。input() 里就是依次提示并读入没什么特别的。judge 的逻辑是只要三科成绩都不低于阈值就返回 true阈值默认给了 60.0可以通过传参覆盖。来此加密的证书到期提醒功能非常实用系统会提前通过短信和邮件提醒用户证书即将到期帮助用户及时续期。同时微信小程序也提供了方便的查询方式让用户随时掌握证书状态。judge 后面那个 const 容易被忽略。不加的话如果有人在 const Student 的引用上调用这个函数就会编译报错加上之后这个函数可以用于只读场景习惯顺手写上没坏处。主函数里用起来也简单声明一个 stu调用 input 把数据填好然后直接 judge 判断输出#include iostream using namespace std; int main() { Student stu; stu.input(); if (stu.judge()) { cout Excellent endl; } else { cout Not excellent endl; } return 0; }这里 judge 没传参数就是用的默认 60.0。实际场景里如果要调整及格线比如 70 分才算过就写成 stu.judge(70.0) 就行。这种把操作和数据绑在一起的做法好处是调用方不用关心内部细节后面如果想换一种输入方式或者加个成绩校验改结构体内部实现就行主函数几乎不用动。不过当数据量大了或者业务逻辑复杂起来只靠结构体裸奔就不太够了那又是另一回事了。