读书人

关于继承的有关问题?

发布时间: 2012-04-09 13:41:24 作者: rapoo

关于继承的问题???
#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 ");这句话构造出的对象不一样的。

读书人网 >C++

热点推荐