首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于继承的有关问题?

2012-04-09 
关于继承的问题???#include iostream.h#include string.hclassAdvisor{intnoOfMeeting}classStudent

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

热点排行