//虚函数的作用:允许在派生类中重新定义与基类同名的函数,
//并且可以通过基类指针或引用来访问基类和派生类中的同名函数
#include<iostream>
#include<string>
using namespace std;
class Student
{
public:
Student(int n,char nam[],float s);
//void display(); //基类定义输出函数,
virtual void display(); //加入virtual,就可以:指向基类对象指针的输出派生类的数据,即调用派生类的display()函数
protected:
int num;
char name[30];
float score;
};
Student::Student(int n,char nam[],float s)
{
num=n;
strcpy((char*)name,(char*)nam);
score=s;
}
void Student::display()
{
cout<<"num:"<<num<<"\nname"<<name<<"\nscore:"<<score<<endl;
}
class Graduate:public Student
{
public:
Graduate(int,char nam[],float s,float w);
void display(); //定义与基类同名的输出函数
private:
float wage;
};
Graduate::Graduate(int n,char nam[],float s,float w):Student(n,nam,s),wage(w){}
void Graduate::display()
{
cout<<"num:"<<num<<"\nname"<<name<<"\nscore:"<<score<<"\nwage:"<<wage<<endl;
}
int main()
{
Student stud1(101,"张三",99.9); //定义基类对象
Graduate grad1(102,"李四",89.9,1200);//定义派生类对象
Student *pt; //定义指向基类对象的指针变量
pt=&stud1;
pt->display();//输出基类的对象中的数据
pt=&grad1;
pt->display();//指向基类的指针不能调用派生类,不输出派生类的数据,先将派生类的对象指针转换为基类指针 (虚函数可以解决)
system("pause");
return 0;
}