C++虚函数问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 00:44:33
我写了下面这个联系程序,最后几行的指针输出不能正常输出,希望能得到高手的帮助,我对C++是新手,以前是学JAVA的。
#include <iostream.h>
#include <afx.h>

class CLesson{
public :
CString Teacher;
void LessonInit(CString tea,int time,CString name);
void LessonShow();
virtual void TeacherInfo();
private :
CString LessonName;
protected :
int LessonTime;
};

void CLesson::LessonInit(CString tea,int time,CString name){
Teacher = tea;
LessonName = name;
LessonTime = time;
}

void CLesson::LessonShow(){
cout<<"课程名:"<<LessonName<<", "<<"课程时间:"<<LessonTime<<", "<<"授课老师:"<<Teacher<<endl;
}

void CLesson::TeacherInfo(){
cout<<"基类输出:"<<Teacher<<endl;
}

class CSubLesson : public CLesson{
public :
void TimeInfo();
void TimeInfo(int times

我没有太多可说的,关于C++标准楼上已经写得很详细了。
你的意思是不是a->TeacherInfo()和b->TeacherInfo()都没有打印出老师的名字?
那是因为没有初始化Teacher变量的内容。
还是你要知道为什么a->TeacherInfo()打印的是子类输出,而b->TeacherInfo()打印的是基类输出?
那是因为C++的多态性,这和Java不同,Java的多态性无须在函数声明上做任何手脚,而C++必须加上virtual来实现,从这个意义上讲,Java的函数都是虚函数。
另外就是想实现多态你还必须用指针,用
CSubLesson var1;
(CLesson)var1.TeacherInfo();
是不能实现多态的。

建议你学习的时候用较新的教材,配合新的C++标准来讲的比较好。
#include<iostream> //此处是C++标准,你用的形式过时了
#include<string>//
using namespace std;//
class CLesson{
public:
string Teacher; //所有的CString替换为string了
void LessonInit(string tea,int time,string name);
void LessonShow();
virtual void TeacherInfo();
private :
string LessonName;
protected :
int LessonTime;
};

void CLesson::LessonInit(string tea,int time,string name){
Teacher = tea;
LessonName = name;
LessonTime = time;
}

void CLesson::LessonShow(){