- 4
- 0
- 约1.32万字
- 约 82页
- 2016-11-27 发布于河南
- 举报
08C复习
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * 通过虚函数与指向基类对象的指针变量的配合使用,就能方便地调用同一类族中不同类的同名函数。 如果指针不断地指向同一类族中不同类的对象,就能不断地调用这些对象中的同名函数。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * class Student //声明基类Student {public: Student(int, string,float); //声明构造函数 void display(); //声明输出函数 protected: int num; string name; float score; }; void Student::display( ) //定义输出函数 {cout″num:″num″\\nname:″name″\\nscore:″score″\\n\\n″;} class Graduate:public Student //声明公用派生类Graduate {public: Graduate(int, string, float, float); //声明构造函数 void display( ); //输出函数,与基类的display函数原型相同 private: float pay; }; // Graduate类成员函数的实现 void Graduate::display( ) //定义输出函数 {cout″num:″num″\\nname:″name″\\nscore:″score″\\npay=″payendl;} 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类对象 stud1.display( ); grad1.display( ); return 0; } //主函数 int main() {Student stud1(1001,″Li″,87.5); //定义Student类对象stud1 Graduate grad1(2001,″Wang″,98.5,563.5); //定义Graduate类对象 Student *pt=stud1; //定义指向基类对象的指针变量pt pt-display( ); pt=grad1; pt-display( ); return 0; } 运行结果如下: num:1001(stud1的数据) name:Li score:87.5 num:2001 (grad1中基类部分的数据) name:wang score:98.5 下面对程序作一点修改,在Student类中声明display函数时,在最左面加一个关键字virtual,即 virtual void display( ); 这样就把Student类的display函数声明为虚函数。 运行结果: num:1001 (stud1的数据) name:Li score:87.5 num:2001 (grad1中基类部分的数据) name:wang score:98.5 pay=1200 (这一项以前是没有的) 由虚函数实现的动态多态性就是: 同一类族中不同类的对象,对同一函数调用作出不同的响应。 虚函数的使用方法是: (1) 在基类中用virtual声明成员函数为虚函数。 (2) 在派生类中重新定义此函数,要求函数原型与基类的虚函数相同,并根据派生类的需要重新定义函数体。(注意:如果在派生类中没有对基类的虚函数重新定义,则派生类简单地继承其直接基类的虚函数。) (3) 定义一个指向基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象。 (4) 通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。 静态关联(static binding) 在源程序编译时进行关联。(如重载函数) 又称为早期关联(e
原创力文档

文档评论(0)