多态性的实现
程序代码:
//基类与派生类中有同名函数 /* 在下面的程序中 Student 是基类,Graduate 是派生类,它们都有 display 这个同名的函数 */ #include <iostream> #include <string> using namespace std; //声明基类 Student class Student { public: Student( int, string,float); //声明构造函数 //void display( ); //声明输出函数 virtual 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); //声明派生类构造函数 virtual void display( ); //声明输出函数,根据C++规定,这里的 display 函数自然成为虚函数 // “ virtual ”可加可不加 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( ); //grad1.display( ); //Graduate * ptr = &grad1; //ptr->display( ); pt = &grad1; pt->display( ); system("pause"); return 0; } /*这个例子充分说明了通过指针,能够调用同一类族中不同类的同名函数,以实现多态性。如果指针不断地指向同一类族 中不同类的对象,就能不断地调用这些对象中的同名函数*/