在进行虚函数生命之前,指向基类的指针就算是把地址取到派生类的值也只能输出基类中所包含的数据
**#include <iostream> #include <strings.h> #include <cstring> using namespace std; class Student { public: Student(int,string,float); //声明构造函数 void display(); //声明输出函数,加上virtual之后就能够实现在主函数,中调用Student类型的指针也能输出基类的所有的数据成员。 protected: int num; string name; float score; }; 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"<<endl; } class Graduate:public Student { public: Graduate(int,string,float,float); void display(); private: float pay; }; 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); Graduate grad1(2001,"Wang",98.5,563.5); Student *pt=&stud1; pt->display(); pt=&grad1; pt->display(); return 0; } ** **/home/andrew/文档/Clion/untitled5/cmake-build-debug/untitled5 num:1001 name:Li score:87.5 num:2001 name:Wang score:98.5 //只是输出基类中的数据。 Process finished with exit code 0 **在进行虚函数声明之后,同一个指针变量,指向基类的指针也能够输出派生类的全部的数据。
在基类使用virtual声明成员函数为虚函数,这样可以在派生类中重新定义此函数,为它赋予新的公功能,并能方便的调用。
**#include <iostream> #include <strings.h> #include <cstring> using namespace std; class Student { public: Student(int,string,float); //声明构造函数 virtual void display(); //声明输出函数,加上virtual之后就能够实现在主函数,中调用Student类型的指针也能输出基类的所有的数据成员。 protected: int num; string name; float score; }; 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"<<endl; } class Graduate:public Student { public: Graduate(int,string,float,float); void display(); private: float pay; }; 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); Graduate grad1(2001,"Wang",98.5,563.5); Student *pt=&stud1; pt->display(); pt=&grad1; pt->display(); return 0; } ** **/home/andrew/文档/Clion/untitled5/cmake-build-debug/untitled5 num:1001 name:Li score:87.5 num:2001 name:Wang score98.5 pay:563.5 /// Process finished with exit code 0**