/**
* * class.cpp
* vesion:1.0 2006-9-12
* auther:jsp
* (C++)(oop)->有关类、继承、多态、构造、析解、重载
*/
/**
*Student()、Student(char *Pname,char *PstuId,char *pclassId,char *pprofeId);
*两个构造函数是为了演示构造函数的重载.cost函数就存在多态,于是
*在此处用了virtual关键词,即:虚函数。
*
*/
#include"iostream.h"
#include"string.h"
class Student{//Student类
public:
Student();
Student(char *Pname,char *PstuId,char *pclassId,char *pprofeId);
~Student();
virtual float cost(float stayCost,float lifeCost,float studyCost)
{
return stayCost+lifeCost+studyCost;
}
protected:
char name[10];
char stuId[10];
char classId[10];
char profeId[10];
};
//不带参数的构造函数
Student::Student()
{
strcpy(name, "李博士");
strcpy(stuId,"100001");
strcpy(classId,"200001");
strcpy(profeId ,"10001");
cout<<"姓名/t"<<"学号/t"<<"班级号/t"<<"专业代码/t"<<"/n";
cout<<name<<"/t"<<stuId<<"/t"<<classId<<"/t"<<profeId<<"/n";
}
//析构函数
Student::~Student()
{
cout<<name<<" WAS FREE!!"<<"/n";
}
//带参数的构造函数
Student::Student(char *Pname,char *PstuId,char *pclassId,char *pprofeId)
{
strcpy(name, Pname);
strcpy(stuId,PstuId);
strcpy(classId,pclassId);
strcpy(profeId ,pprofeId);
cout<<"姓名/t"<<"学号/t"<<"班级号/t"<<"专业代码/t"<<"/n";
cout<<name<<"/t"<<stuId<<"/t"<<classId<<"/t"<<profeId<<"/n";
}
class StuDoctor:public Student
{
public:
StuDoctor(char *Pname,char *PstuId,char *pclassId,char *pprofeId,char *pteacher):Student(Pname,PstuId,pclassId,pprofeId)
{
strcpy(teacher,pteacher);
cout<<"姓名/t"<<"学号/t"<<"班级号/t"<<"专业代码/t"<<"导师"<<"/n";
cout<<name<<"/t"<<stuId<<"/t"<<classId<<"/t"<<profeId<<"/t/t"<<teacher<<"/n";
}
virtual float cost(float stayCost,float lifeCost,float studyCost)
{
return stayCost+studyCost;
}
~StuDoctor();
protected:
char teacher[10];
};
StuDoctor::~StuDoctor()
{
cout<<name<<" WAS FREE!!"<<"/n";
}
void disp(Student * X)
{
cout<<X->cost(800,2000,250)<<"/n";
}
void main()
{
Student z;
Student gs("王五","960515","960515","1015");
StuDoctor ds("jsp","960515","9605","1015","chtor");
disp(&z);
disp(&ds);
}