1.
学生类
Cstudent
及完整程序的设计
(1)
公有数据成员:姓名
name
、学号
studentId
、成绩
score
。
(2)
成员函数:
modify()
用于修改信息,
print()
负责显示数据成员的值;构造函数对数据成员初始
化。
(3)
主函数:创建类的对象
student_a
,初始化姓名为“张三”、学号
20170301001
、成绩
86
,创建
对象
student_b
,
student_b
调用
modify()
设置姓名为“李四”、学号
20170301002
、成绩
66.5
;然后,
对象调用
print()
显示如下信息:
#
创建
Cstudent
类的对象
student_a
,信息如下
Name:
张三
StudentId: 20170301001
成绩
score: 86
#
创建
Cstudent
类的对象
student_b
,信息如下
Name:
李四
StudentId: 20170301002
成绩
score: 66.5
#include<bits/stdc++.h>
using namespace std;
class CStudent
{
public:
string name;
char *studentid;
float score;
CStudent();
CStudent(char*,char*,float);
~CStudent();
void modify(char*,char*,float);
void print();
};
CStudent::CStudent()
{
name=" ";
studentid=new char[12];
strcpy(studentid," ");
score=0.0;
}
CStudent::CStudent(char* name_,char* id,float s)
{
name=name_;
studentid=new char[strlen(id)+1];
strcpy(studentid,id);
score=s;
}
CStudent::~CStudent()
{
delete []studentid;
}
void CStudent::modify(char *name_,char *id,float s)
{
name=name_;
strcpy(studentid,id);
score=s;
}
void CStudent::print()
{
cout<<"Name:"<<name<<endl;
cout<<"StudentId:"<<studentid<<endl;
cout<<"Score:"<<score<<endl;
}
int main()
{
CStudent student_a("张三", "20170301001", 86);
student_a.print();
cout<<endl;
CStudent student_b;
student_b.modify("李四", "20170301002", 66.5);
student_b.print();
return 0;
}
2.
班级类
Cclass
及完整程序的设计(
30
分)
(
1
)数据成员:
Cstudent
类对象
student_1
的信息为“张三”、学号
20170301001
、成绩
86
,
student_2
的信息为“李四”、学号
20170301001
、成绩
66.5
,
student_3
的信息为“王五”、学号
20170301001
、
成绩
40
;
Num
存放班级人数;
(2)成员函数:
find()
计算班级中及格与不及格人数,
print()
获取(读取)有关数据后显示信息,
以及构造函数。
(3)主函数:创建类
Cclass
的对象
class_c
,采用合适的设计,通过成员函数
find()
等方法计算班
级人数、及格与不及格人数;然后,对象调用
print()
显示如下信息:
#
创建班级对象并显示该班信息
班级成员:张三,李四,王五
班级人数
: 3
班级及格人数
: 2
班级不及格人数
: 1
#include<bits/stdc++.h>
using namespace std;
class CStudent
{
public:
string name;
char *studentid;
float score;
CStudent();
CStudent(char*,char*,float);
~CStudent();
void modify(char*,char*,float);
void print();
static int obcount;
};
int CStudent::obcount=0;
CStudent::CStudent()
{
name=" ";
studentid=new char[12];
strcpy(studentid," ");
score=0.0;
obcount++;
}
CStudent::CStudent(char* name_,char* id,float s)
{
name=name_;
studentid=new char[strlen(id)+1];
strcpy(studentid,id);
score=s;
obcount++;
}
CStudent::~CStudent()
{
delete []studentid;
obcount--;
}
void CStudent::modify(char *name_,char *id,float s)
{
name=name_;
strcpy(studentid,id);
score=s;
}
void CStudent::print()
{
cout<<"Name:"<<name<<endl;
cout<<"StudentId:"<<studentid<<endl;
cout<<"Score:"<<score<<endl;
}
class Cclass
{
public:
CStudent student_1;
CStudent student_2;
CStudent student_3;
int total;
int pass;
int fail;
Cclass();
~Cclass();
virtual void print();
virtual void find();
};
Cclass::Cclass():student_1("张三", "20170301001", 86),student_2("李四", "20170301002", 66.5),
student_3("王五","2017031003",40)
{
total=CStudent::obcount;
pass=0;
fail=0;
}
Cclass::~Cclass()
{
}
void Cclass::find()
{
if(student_1.score>=60) pass++;
else fail++;
if(student_2.score>=60) pass++;
else fail++;
if(student_3.score>=60) pass++;
else fail++;
}
void Cclass::print()
{
cout<<"班级成员"<<student_1.name<<" "<<student_2.name<<" "<<student_3.name<<endl;
cout<<"Num:"<<total<<endl;
cout<<"班级及格人数"<<pass<<endl;
cout<<"班级不及格人数"<<fail<<endl;
}
int main()
{
Cclass class_c;
class_c.find();
class_c.print();
return 0;
}
3.
班级统计类
Canalysis
(派生类)
及完整程序的设计(
30
分)
(1) Canalysis
类是
Cclass
类(基类)的派生类,继承方式为
public
方式;
(2)
数据成员:
Saver
存放班级平均成绩;构造函数对数据成员初始化(值为
0
);
(3)
成员函数:
Aver()
计算班级平均成绩并存到
Saver
,
find()
求出班级中的最高成绩,
print()
获取
有关数据后显示信息。
(4)
主函数:创建类
Cclass
的对象
class_c
,创建类
Canalysis
的对象
analysis_d
,采用合适的设计,
由成员函数
Aver()
计算班级平均成绩;设计合适的指针与方法来实现多态性,该指针调用成员函
数
find()
计算班级中及格与不及格人数,该指针调用成员函数
find()
求出班级中的最高成绩,该指
针调用
print()
显示如下信息:(主函数中
不允许用
cout
语句,但注释行
"#…"
例外)
#
统计计算班级的学生成绩情况
班级成员:张三,李四,王五
班级人数
: 3
班级及格人数
: 2
班级不及格人数
: 1
班级平均成绩
: 64.1
班级最高成绩
: 86
#include<bits/stdc++.h>
using namespace std;
class CStudent
{
public:
string name;
char *studentid;
float score;
CStudent();
CStudent(char*,char*,float);
~CStudent();
void modify(char*,char*,float);
void print();
static int obcount;
};
int CStudent::obcount=0;
CStudent::CStudent()
{
name=" ";
studentid=new char[12];
strcpy(studentid," ");
score=0.0;
obcount++;
}
CStudent::CStudent(char* name_,char* id,float s)
{
name=name_;
studentid=new char[strlen(id)+1];
strcpy(studentid,id);
score=s;
obcount++;
}
CStudent::~CStudent()
{
delete []studentid;
obcount--;
}
void CStudent::modify(char *name_,char *id,float s)
{
name=name_;
strcpy(studentid,id);
score=s;
}
void CStudent::print()
{
cout<<"Name:"<<name<<endl;
cout<<"StudentId:"<<studentid<<endl;
cout<<"Score:"<<score<<endl;
}
class Cclass
{
public:
CStudent student_1;
CStudent student_2;
CStudent student_3;
int total;
int pass;
int fail;
Cclass();
~Cclass();
virtual void print();
virtual void find();
};
Cclass::Cclass():student_1("张三", "20170301001", 86),student_2("李四", "20170301002", 66.5),
student_3("王五","2017031003",40)
{
total=CStudent::obcount;
pass=0;
fail=0;
}
Cclass::~Cclass()
{
}
void Cclass::find()
{
if(student_1.score>=60) pass++;
else fail++;
if(student_2.score>=60) pass++;
else fail++;
if(student_3.score>=60) pass++;
else fail++;
}
void Cclass::print()
{
cout<<"班级成员"<<student_1.name<<" "<<student_2.name<<" "<<student_3.name<<endl;
cout<<"Num:"<<total<<endl;
cout<<"班级及格人数"<<pass<<endl;
cout<<"班级不及格人数"<<fail<<endl;
}
class Canalysis:public Cclass
{
public:
float Saver;
float max;
Canalysis();
~Canalysis();
float Aver();
void find();
void print();
};
Canalysis::Canalysis()
{
Saver=0.0;
max=0.0;
}
Canalysis::~Canalysis()
{
}
float Canalysis::Aver()
{
Saver=(student_1.score+student_2.score+student_3.score)/3.0;
return Saver;
}
void Canalysis::find()
{
max=student_1.score;
if(student_2.score>max) max=student_2.score;
if(student_3.score>max) max=student_3.score;
}
void Canalysis::print()
{
cout << "班级平均成绩:" <<Aver() << endl;
cout << "班级最高成绩:" <<max<< endl;
}
int main()
{
Cclass class_c;
Cclass *p=&class_c;
p->find();
p->print();
Canalysis analysis_d;
p = &analysis_d; //基类指针 p 存派生类对象地址
p->find(); //基类指针 p 调用派生类的成员函数,实现多态性
p->print();
return 0;
}
主函数也可以这样调用
int main()
{
Cclass *p=new Cclass;
p->find();
p->print();
Cclass *p1 = new Canalysis;
p1->find();
p1->print();
return 0;
}