虚函数意义
参考:http://c.biancheng.net/cpp/biancheng/view/244.html
虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
也就是说,指针的类型是的基类的,但是可以指向基类或者派生类。
非虚函数
#include <iostream> #include <string> using namespace std; //声明基类Student class Student { public: Student(int, string,float); //声明构造函数 // virtual void display( );//声明输出函数 void display( );//声明输出函数 protected: //受保护成员,派生类可以访问 int num; string name; float score; }; //Student类成员函数的实现 Student::Student(int n, string nam,float s)//定义构造函数 { num=n; name=nam; score=s; } void Student::display( )//定义输出函数 { cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\n\n"; } //声明公用派生类Graduate class Graduate:public Student { public: Graduate(int, string, float, float);//声明构造函数 void display( );//声明输出函数 private:float pay; }; // Graduate类成员函数的实现 void Graduate::display( )//定义输出函数 { cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\npay="<<pay<<endl; } Graduate::Graduate(int n, string nam,float s,float p):Student(n,nam,s),pay(p){} //主函数 int main() { Student stud1(1001,"Li",87.5);//定义Student类对象stud1 Graduate grad1(2001,"Wang",98.5,563.5);//定义Graduate类对象grad1 Student *pt=&stud1;//定义指向基类对象的指针变量pt pt->display( ); pt=&grad1; pt->display( ); return 0; } /* output: num:1001 name:Li score:87.5 num:2001 name:Wang score:98.5 */
在Student类中使用virtual void display( );
,相应的输出结果:
/* output: num:1001 name:Li score:87.5 num:2001 name:Wang score:98.5 pay=563.5 */
现在用同一个指针变量(指向基类对象的指针变量),不但输出了学生stud1的全部数据,而且还输出了研究生grad1的全部数据,说明已调用了grad1的display函数。