ch161.cpp:继承Student的例子#include<iostream>#include<string>using namespace std;classAdvisoritint noOfMeeting ;1;classStudent{char name[40];int semesterHours;float average;public :Student(char * pName ="no name"){strncpy(name,pName,sizeof(name));average = semesterHours =0;1
ch16_1.cpp:继承Student的例子 #include<iostream> #include<string> using namespace std; class Advisor { int noOfMeeting ; } ; class Student { char name[40]; int semesterHours; float average; public: Student(char * pName = "no name" ) { strncpy(name, pName, sizeof(name) ) ; average = semesterHours = 0 ; }
void addCourse(inthours,floatgrade)1average=(semesterHours * average+grade);//总分儿总修学时semesterHours += hours;//平均分average/= semesterHours;1int getHours()return semesterHours;)float getAverage()(return average; )void display ()cout<<"name =}"" <<name<<"\", hours =" <<semesterHours<<", average ="<<average<<endl ;classGraduateStudent :public StudentAdvisor advisor;int qualifierGrade;public:int getHours (){ return semesterHours;)1;
void addCourse ( int hours , float grade ) { average = ( semesterHours * average + grade ) ; //总分 semesterHours += hours; //总修学时 average /= semesterHours; //平均分 } int getHours ( ) { return semesterHours ; } float getAverage ( ) { return average ; } void display ( ) { cout<<"name = \"“ <<name<< "\", hours = " <<semesterHours <<", average = "<<average<<endl ; } } ; class GraduateStudent : public Student { Advisor advisor; int qualifierGrade; public: int getHours ( ) { return semesterHours ; } } ;
void main( )Student类对象Student ds ("Lo lee undergrade") ;GraduateStudent gs ;GraduateStudent类对象ds . addCourse (3, 2.5);ds . display() ;gs . addCourse(3, 3.0) ;gs . display() ;11运行结果:name="Lo lee undergrade",hours =3,average =0.833333name="noname",hours=3,average=1注:作为Student的子类,对象gs可以做ds能做的任何事情
void main( ) { Student ds ("Lo lee undergrade") ; GraduateStudent gs ; ds . addCourse (3, 2.5) ; ds . display( ) ; gs . addCourse(3, 3.0) ; gs . display() ; } 运行结果: name = "Lo lee undergrade", hours = 3 , average = 0.833333 name = "no name", hours = 3 , average = 1 GraduateStudent类对象 Student类对象 注:作为Student的子类,对象gs可以做ds能做的任何事情
对象gs有name、semesterHoursclassAdvisorYaverage数据成员,以及addCourse()int noOfMeeting ;成员函数。:此外,gs还比ds多了一些成员classStudent即导师Advisor和资格考试分char name[40];qualifierGrade。int semesterHours;floataverage;public :void addCourse(int hours,float grade);;classGraduateStudent:public Student1Advisor advisor;int qualifierGrade;public :int getHours()returnsemesterHours;1;
class Advisor { int noOfMeeting ; } ; class Student { char name[40]; int semesterHours; float average; public: void addCourse ( int hours , float grade ) ; } ; class GraduateStudent : public Student { Advisor advisor; int qualifierGrade; public: int getHours ( ) { return semesterHours ; } } ; 对象gs有name、semesterHours、 average数据成员,以及addCourse( ) 成员函数。 此外,gs还比ds多了一些成员, 即导师 Advisor 和 资 格 考 试 分 qualifierGrade
16.2继承的工作方式 gs 是一个大学生,所以对 Student 中的addCourse()成员函数的调用相当于是在调用自已的成员函数void fn (Student & s)函数fn()接收Student类对象作为它的参数1任何学生想要做的事;Jvoid main ()GraduateStudent gs ;fn()将GraduateStudentfn (gs) ;对象看作Student对象来接1 gs受
• gs 是 一 个 大 学 生 , 所以对 Student 中 的 addCourse( )成员函数的调用。 • 相当于是在调用自己的成员函数。 void fn ( Student & s ) { //任何学生想要做的事 ; } void main ( ) { GraduateStudent gs ; fn ( gs ) ; } gs 函数fn( )接收Student 类对象作为它的参数 fn( ) 将 GraduateStudent 对象看作Student对象来接 受