关于继承的问题???
#include <iostream.h>
#include <string.h>
class Advisor
{
int noOfMeeting;
};
class Student
{
public:
Student(char* pName = "no name ")
{
strcpy(name,pName);
average = semesterHours = 0;
}
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;
}
protected:
char name[40];
int semesterHours;
float average;
};
class GraduateStudent: public Student
{
public:
int getQualigier(){return qualifierGrade;}
protected:
Advisor advisor;
int qualifierGrade;
};
void main()
{
Student ds( "Lo lee Undergrad ");
GraduateStudent gs;
ds.addCourse(3,2.5);
gs.display(); /*为什么ds.display;不是等效,难道没有继承 吗????? 解释一下行吗?*/
}
[解决办法]
void main()
{
Student ds( "Lo lee Undergrad ");
GraduateStudent gs;
ds.addCourse(3,2.5);
gs.display(); //因为是继承,这里gs因该可以访问这个函数嘛~~~~~但为什么就是不能输出值呢??????????????????
gs.addCourse(3,3.0);
}
书上的
输出结果是
name = "Lo lee Undergrad ",hours = 3,average = 0.833333
name = "no name ",hours = 3,average = 1
这个main不能得到搂主所给的输出结果,如果你想测试继承的关系,可以这样:
void main()
{
Student ds( "Lo lee Undergrad ");
GraduateStudent gs;
GraduateStudent gs1( "gs1 Lo lee Undergrad ");
ds.addCourse(3,2.5);
gs.addCourse(3,3.0);
gs1.addCourse(3,3.0);
ds.display();
gs.display(); //因为是继承,
gs1.display();
}
加上GraduateStudent的构造函数:
GraduateStudent(char* pName = "no name "):Student(pName){};
[解决办法]
GraduateStudent与Student的关系不对。
如果GraduateStudent与Student是一对多的话,像你那样就可以。
而你的程序声明GraduateStudent时会调用Student类的构造函数,而这时的Student类的构造函数构造出来的对象是和Student ds( "Lo lee Undergrad ");这句话构造出的对象不一样的。