- 1、本文档共61页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 多态性与虚函数 C++允许一个基类指针指向其派生类的对象,但通过该指针只能访问派生类中从基类继承的数据与函数,不能访问派生类自定义的成员。上例中,通过pp-Area( );访问到的只是从基类继承来的同名成员。 提出设想:能否用同一个调用形式,既能调用派生类又能调用基类的同名函数。在程序中不是通过不同的对象名去调用不同派生层次中的同名函数,而是通过指针调用它们。 C++中的虚函数就是用来解决这个问题的。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。 例如,在一个图形类继承结构中,设类Cshape 是所有具体图形类(如矩形、三角形、圆形等)的基类,则函数调用语句pShape-Draw( )可能是绘制一个矩形,也可能是绘制一个三角形或一个圆。具体绘制什么图形,取决于pShape 所指的对象。在C++中,是通过虚函数机制来实现这种类的行为的多态性。 例12.2 基类与派生类中有同名函数。 在下面的程序中Student是基类,Graduate是派生类,它们都有display这个同名的函数。 #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( ) //定义输出函数 {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=″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); Graduate grad1(2001,″Wang″,98.5,563.5); 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 pa
您可能关注的文档
- 08 IIS服务器配置及管理.ppt
- 基于绝对差度量灰阶图像光学匹配运算_成罡.pdf
- 08.PHP5.6.6自学笔记 类及对象.pdf
- 基于空间引力模型选址问题研究.pdf
- 8 图及网络4--最大流问题.pdf
- 基于量图分析法中国贫困省区划分研究.pdf
- 8第八节 图论(第4节).ppt
- 基于零部件试验汽车侧面碰撞结构优化研究.pdf
- 8第八节 图论(第5节).ppt
- 8-第八篇_存储空间组织-3节-缩减版.ppt
- 中国国家标准 GB/T 45133-2025气体分析 混合气体组成的测定 基于单点和两点校准的比较法.pdf
- 《GB/T 45133-2025气体分析 混合气体组成的测定 基于单点和两点校准的比较法》.pdf
- 中国国家标准 GB/T 43707-2025科学数据溯源元数据.pdf
- 《GB/T 43707-2025科学数据溯源元数据》.pdf
- GB/T 43707-2025科学数据溯源元数据.pdf
- GB/T 43710-2025科学数据安全审计要求.pdf
- 中国国家标准 GB/T 43710-2025科学数据安全审计要求.pdf
- 《GB/T 43710-2025科学数据安全审计要求》.pdf
- 中国国家标准 GB/T 45222-2025食品安全事故应急演练要求.pdf
- GB/T 45222-2025食品安全事故应急演练要求.pdf
文档评论(0)