描述
在一个学生信息处理程序中,要求实现一个代表学生的类,并且所有成员变量都应该是私有的。
(注:评测系统无法自动判断变量是否私有。我们会在结束之后统一对作业进行检查,请同学们严格按照题目要求完成,否则可能会影响作业成绩。)
输入
姓名,年龄,学号,第一学年平均成绩,第二学年平均成绩,第三学年平均成绩,第四学年平均成绩。
其中姓名、学号为字符串,不含空格和逗号;年龄为正整数;成绩为非负整数。
各部分内容之间均用单个英文逗号”,”隔开,无多余空格。
输出
一行,按顺序输出:姓名,年龄,学号,四年平均成绩(向下取整)。
各部分内容之间均用单个英文逗号”,”隔开,无多余空格。
样例输入
Tom,18,7817,80,80,90,70
样例输出
Tom,18,7817,80
解题思路:
1、使用cin.getline读入字符串,用一个char变量吃掉逗号。
2、对于类中的私有变量,需要在共有中引入一个成员函数,将外部变量导入。
3、通过成员函数读入,拷贝至私有变量后,可直接返回打印。
注意:
visual studio编译环境下会提示使用strcpy_s,而poj则是strcpy,使用strcpy_s反而会报错。
#include<iostream>
#include<string.h>
using namespace std;
class Student {
private:
char name[20];
char id[10];
int age;
int s1, s2, s3, s4;
public:
//因为所定义的变量为私有,需要有一个成员函数作为引导。
char* Name(const char* Oname);
int Age(const int Oage);
char* ID(const char* Oid);
int Mean(int Os1, int Os2, int Os3, int Os4);
};
//正好练习一下在类外进行定义
//使用string.h中的字符串拷贝
char* Student::Name(const char* Oname){
strcpy_s(name, Oname);//strcpy_s在poj上无法通过
return name;
}
int Student::Age(const int Oage) {
age = Oage;
return age;
}
char* Student::ID(const char* Oid) {
strcpy_s(id, Oid);
return id;
}
int Student::Mean(int Os1, int Os2, int Os3, int Os4) {
s1 = Os1;
s2 = Os2;
s3 = Os3;
s4 = Os4;
return (s1 + s2 + s3 + s4) / 4;
}
int main() {
char name[20];
char id[10];
char dot;
int age;
int s1, s2, s3, s4;
//用个char型字符吃掉逗号
cin.getline(name, 20, ',');
cin >> age >> dot;
cin.getline(id, 10, ',');
cin >> s1 >> dot >> s2 >> dot >> s3 >> dot>> s4;
Student S;
cout << S.Name(name) << ',' << S.Age(age) << ',' << S.ID(id) << ',' << S.Mean(s1, s2, s3, s4) << endl;
return 0;
//getchar();
}