第8章多态性教材.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * */69 虚 函 数 虚函数是动态联编的基础;是非静态成员函数。 在类的声明中,在函数原型之前写virtual。virtual 只用成员函数的声明。 虚函数具有继承性,基类中声明了虚函数,派生类中无论是否说明,同名原型函数都自动为虚函数。 本质:不是重载声明而是覆盖。 调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数。 虚 函 数 * */69 例 #include iostream class B0 { // 基类B0声明 public: virtual void display( ) // 虚成员函数 { cout B0::display() endl; } }; class B1 : public B0 { // 公有派生 public: void display( ) { cout B1::display() endl; } }; class D1 : public B1 { // 公有派生 public: void display( ) { cout D1::display() endl; } }; 虚 函 数 * */69 void fun( B0 *ptr ) // 普通函数 { ptr-display( ); } int main( ) { B0 b0, *p; // 声明基类对象和指针 B1 b1; // 声明派生类对象 D1 d1; // 声明派生类对象 p = b0; fun( p ); // 调用基类B0函数成员 p = b1; fun( p ); // 调用派生类B1函数成员 p = d1; fun( p ); // 调用派生类D1函数成员 } 运行结果: B0::display( ) B1::display( ) D1::display( ) * * */69 虚析构函数 何时需要虚析构函数? 当你可能通过基类指针删除派生类对象时。 注意: C++中没有虚构造函数 如果一个类的析构函数是虚函数,那么它的所有子类的析构函数也都是虚函数。 虚析构函数实现运行时多态,保证使用基类的指针就能够调用适当的析构函数针对不同的对象进行清理工作。 虚 函 数 * */69 纯虚函数与抽象类 语法规则:纯虚函数在基类中声明。基类中没有该函数的实现部分(即函数体),其实现部分由该类的子类给出。 纯虚函数的声明格式: virtual 函数类型 函数名(参数列表) = 0; 带有纯虚函数的类称为抽象类: class 类名 { virtual 函数类型 函数名(参数表) = 0; ...... } 纯虚函数与抽象类 * */69 抽 象 类 纯虚函数与抽象类 作用: 抽象类为抽象和设计的目的而声明,将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为。 对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现。 抽象类是一种特殊的类,它为一个类族提供了统一的操作界面。换言之,抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。 * */69 抽 象 类 纯虚函数与抽象类 class B0 { // 抽象基类B0声明 protected: int x,y; public: // 外部接口 virtual void display( ) = 0; // 纯虚函数成员 virtual void f( )=0; }; 注意: 抽象类只能作为基类来使用。 不能声明抽象类的对象。 可以申明抽象类的指针和引用 * */69 例 纯虚函数与抽象类 #include iostream.h class B0 { // 抽象基类B0声明 public: // 外部接口 virtual void display( ) = 0; // 纯虚函数成员 virtual void f( )=0; }; class B1 : public B0 { // 公有派生 public: void display( ){coutB1::display()endl;} // 虚成员函数 virtual void f( ){ } }; class D1 : public B1 { // 公有派生 public: void display( ){coutD1::display()endl;} // 虚成员函数 }; * */

文档评论(0)

阿里山的姑娘 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档