这是为女友总结的,女友的专业是网络工程;只是,到目前为止,我遇到的女生在编程敲代码方面的强人,真的是少之又少!这里所遇到的问题详细描述大致如下:
写一个People类,包含构造函数,输入、输出信息函数,数据成员有姓名、编号(可以理解成学号或身份证号吧,我选择的是学号,且为int型)、性别;
一个Studnet类,继承自People类,增加新的数据成员学生成绩;一个Teacher类,继承自People类,只增加新的数据成员教师的教龄。
还有,我一直很诧异为什么现在还有大学在选择C++ IDE的时候还是用Visual C++6.0,不知道Visual C++6.0对C++标准的支持实在是太差了;Visual C++ 6.0可是
十几年前的东西呀!所以下面我所贴的代码在VC++6.0中肯定是无法编译通过的。可以选择IDE的是code::blocks10.05、mingw developer studio或是visual studio 2010等!
包含mylove.h头文件(头文件内容如下),在主函数中调用函数void Test(void)即可,或者将void Test(void)改成主函数即可!
#ifndef MYLOVE_H_INCLUDED
#define MYLOVE_H_INCLUDED
#include <iostream>
#include <string>
///class People/
class People
{
public:
People(string nam = "null",int num = 0,string se = "null"):
name(nam),number(num),sex(se) {}//constructed function
virtual void InputMseeages(string nam,int num,string se){
name = nam,number = num,sex = se;
}//input messages method
virtual void OutputMessages() const{
cout<<"Name:"<<name<<" Number:"<<number<<" Sex:"<<sex<<endl;
}//output messages method
protected:
string name; //name
int number; //number
string sex; //sex
};///end class People
///class Student/
class Student : public People
{
public:
Student(string nam = "null",int num = 0,string se = "null",double gra = 0):
People(nam,num,se),grade(gra) {}//constructed function
void InputMseeages(string nam,int num,string se,double gra){
name = nam,number = num,sex = se,grade = gra;
}//input messages method
void OutputMessages() const{
cout<<"Name:"<<name<<" Number:"<<number<<" Sex:"<<sex<<" Grade:"<<grade<<endl;
}//output messages method
private:
double grade;
};///end class Student
///class Teacher/
class Teacher : public People
{
public:
Teacher(string nam = "null",int num = 0,string se = "null",int yea = 0):
People(nam,num,se),year(yea) {}//constructed function
void InputMseeages(string nam,int num,string se,int yea){
name = nam,number = num,sex = se,year = yea;
}//input messages method
void OutputMessages() const{
cout<<"Name:"<<name<<" Number:"<<number<<" Sex:"<<sex<<" Year:"<<year<<endl;
}//output messages method
private:
int year;
};///end class Teacher
/**
*main function--Only test--
*/
void Test(void)
{
cout<<"class People:"<<endl;
People P("JiangTing",2145,"girl");
P.OutputMessages();
P.InputMseeages("LiYang",2140,"boy");
P.OutputMessages();
cout<<"class Student:"<<endl;
Student S("JiangTing",2145,"girl",0);
S.OutputMessages();
S.InputMseeages("LiYang",2140,"boy",100);
S.OutputMessages();
cout<<"class Teacher:"<<endl;
Teacher T("JiangTing",2145,"girl",0);
T.OutputMessages();
T.InputMseeages("LiYang",2140,"boy",0);
T.OutputMessages();
}//end test
#endif // MYLOVE_H_INCLUDED
效果图:如下
其实,我也有过类似的题目,不过要比前面的复杂多了,具体信息如下:
实验题目(共2题, 第1题)
标题: | 1、虚函数 |
时 限: | 1000 ms |
内存限制: | 10000 K |
总时限: | 3000 ms |
描述: | 1.设计Person类。保护成员:姓名string Name; 公有成员函数:void Print(); 构造函数。 2.从Person类派生Student类。保护成员:学号int Number;公有成员函数:void Print(); 构造函数。 3.从 Person类派生 Teacher类。保护成员:教龄int Year;公有成员函数:void Print();构造函数。 4.从Student类派生Graduate类。保护成员:研究方向string Research;公有成员函数:void Print();构造函数。 在主程序中定义一个Person类的对象指针数组,长度由用户输入。而后,用户依次输入对象信息(对象类别及其包含的成员)。全部录入后,由用户输入要显示的对象信息在数组中的位置,并在屏幕上打印,如果用户输入”exit”则退出。 |
输入: | 指针数组长度; 对象信息(输入方式见输入样例); 要显示的对象在数组中的位置; exit。 |
输出: | 用户要求显示的对象信息。 |
输入样例: | 4 Person Zhang Student Zhao 200905 Graduate Li 200905 DataMining Teacher Luo 10 0 2 exit |
输出样例: | Graduate Li 200905 DataMining |
提示: | 基类的成员函数Print()定义成虚函数。 |
解决代码如下:
#include <iostream>
using namespace std;
#include <string>
#include <cstdlib>
class Person
{
protected:
string Name;
public:
Person(string Name = "\0")
{
this->Name = Name;
}
virtual void Print()
{
cout<<"Person "<<Name<<endl;
}
};
class Student : public Person
{
protected:
int Number;
public:
Student(int Number = 0,string Name = "\0"):Person(Name)
{
this->Number = Number;
}
virtual void Print()
{
cout<<"Student "<<Name<<' '<<Number<<endl;
}
};
class Teacher : public Person
{
protected:
int Year;
public:
Teacher(int Year = 0,string Name = "\0"):Person(Name)
{
this->Year = Year;
}
virtual void Print()
{
cout<<"Teacher "<<Name<<' '<<Year<<endl;
}
};
class Graduate : public Student
{
protected:
string Research;
public:
Graduate(string Research = "\0",string Name = "\0",int Number = 0)
:Student(Number,Name)
{
this->Research = Research;
}
void Print()
{
cout<<"Graduate "<<Name<<' '<<Number<<' '<<Research<<endl;
}
};
int main()
{
int length;
cin>>length;
Person* *p = new Person*[length];
for(int i = 0; i < length; ++i)
{
string obj_Name;
string Name,Research;
int Number,Year;
cin>>obj_Name;
if(obj_Name == "Person")
{
cin>>Name;
p[i] = new Person(Name);
}
else if(obj_Name == "Student")
{
cin>>Name>>Number;
p[i] = new Student(Number,Name);
}
else if(obj_Name == "Teacher")
{
cin>>Name>>Year;
p[i] = new Teacher(Year,Name);
}
else if(obj_Name == "Graduate")
{
cin>>Name>>Number>>Research;
p[i] = new Graduate(Research,Name,Number);
}
else
{
exit(EXIT_FAILURE);
}
}
while(true)
{
string strTemp;
cin>>strTemp;
if(strTemp == "exit")
break;
int index = atoi(strTemp.c_str());
if(index < 0 || index >= length)
break;
p[index]->Print();
}
for(int i = 0; i < length; ++i)
delete p[i];
delete p;
return 0;
}