123C++虚函数虚函数的作用和使用方法.doc

123C++虚函数虚函数的作用和使用方法.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的 #include iostream #include string using namespace std; //声明基类Student class Student { public: Student(int, string,float); //声明构造函数 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( )//定义输出函数 { coutnum: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( )//定义输出函数 { coutnum: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类对象grad1 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 假如想输出grad1的全部数据成员,当然也可以采用这样的方法:通过对象名调用display函数,如grad1.display(),或者定义一个指向Graduate类对象的指针变量ptr,然后使ptr指向gradl,再用ptr-display()调用。这当然是可以的,但是如果该基类有多个派生类,每个派生类又产生新的派生类,形成了同一基类的类族。每个派生类都有同名函数display,在程序中要调用同一类族中不同类的同名函数,就要定义多个指向各派生类的指针变量。这两种办法都不方便,它要求在调用不同派生类的同名函数时采用不同的调用方式,正如同前面所说的那样,到不同的目的地要乘坐指定的不同的公交车,一一 对应,不能搞错。如果能够用同一种方式去调用同一类族中不同类的所有的同名函数,那就好了。 用虚函数就能顺利地解决这个问题。下面对程序作一点修改,在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 (这一项以前是没有的) 看!这就是虚函数的奇妙作用。现在用同一个指针变量(指向基类对象的指针变量),不但输出了学生stud1的全部数据,而且还输出了研究生grad1的全部数据,说明已调用了grad1的display函数。用同一种调用形式“pt-display()”,而且pt是同一个基类指针,可以调用同一类族中不同类的虚函数。这就是多态性,对同一消息,不同对象有 不同的响应方式。 说明:本来基类指针是用来指向基类对象的,如果用它指向派生类对象,则进行指针类型转换,将派生类对象的指针先

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档