面向对象编程:多态性.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
抽象类和纯virtual函数 作用 抽象类为抽象和设计的目的而声明,将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为。 对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现。 注意 抽象类只能作为基类来使用。 不能声明抽象类的对象,换句话说,抽象类不能用作参数类型、函数返回值或显式转换的类型。 构造函数不能是虚函数,析构函数可以是虚函数。 可以声明一个抽象类的指针和引用。通过指针或引用,我们就可以指向并访问派生类对象,以访问派生类的成员。 抽象类派生出新的类之后,如果派生类给出所有纯虚函数的函数实现,这个派生类就可以声明自己的对象,因而不再是抽象类;反之,如果派生类没有给出全部纯虚函数的实现,这时的派生类仍然是一个抽象类。 #includeiostream using namespace std; const double PI=3.14159; class Shapes //抽象基类Shapes声明 { protected: int x,y; public: void setvalue(int xx,int yy=0){x=xx;y=yy;} virtual void display()=0; //纯虚函数成员 }; class Rectangle:public Shapes //派生类Rectangle声明 { public: //虚成员函数 void display(){coutThe area of rectangle is: x*yendl;} }; class Circle:public Shapes //派生类Circle声明 { public: //虚成员函数 void display(){coutThe area of circle is: PI*x*xendl;} }; void main() { Shapes *ptr[2]; //声明抽象基类指针 Rectangle rect1; Circle cir1; ptr[0]=rect1; //指针指向Rectangle类对象 ptr[0]-setvalue(5,8); ptr[0]-display(); ptr[1]=cir1; //指针指向Circle类对象 ptr[1]-setvalue(10); ptr[1]-display(); } 实例研究:工资发放系统 实例研究:13.8 用派生类指针引用一个基类对象会出错 * * * * * * * * 面向对象编程:多态性 提纲 多态性概念 virtual函数(虚函数) 抽象类和纯虚函数 多态性概念 多态性是面向对象程序设计的重要特征之一。 多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。在C++程序设计中, 多态的实现: 函数重载 运算符重载 虚函数 在C++中有两种多态性 编译时的多态性 (静态多态性) 运行时的多态性 (动态多态性) 运行时的多态性是指在程序执行前,无法根据函数名和参数来确定该调用哪一个函数,必须在程序执行过程中,根据执行的具体情况来动态地确定。它是通过类继承关系和虚函数来实现的。目的也是建立一种通用的程序。通用性是程序追求的主要目标之一。 通过函数的重载和运算符的重载来实现的。在程序编译时系统就能决定调用的是哪个函数。 多态性概念 类继承层次中对象之间的关系 基类指针和派生类指针与基类对象和派生类对象4种可能匹配: 直接用基类指针引用基类对象; 直接用派生类指针引用派生类对象; 用派生类指针引用一个基类对象; 用基类指针引用一个派生类对象; #include iostream using namespace std; class B0 //基类B0声明 {public: //外部接口 void display() //虚成员函数 {coutB0::display()endl;} }; class B1: public B0 //公有派生 { public: void display() { coutB1::display()endl; } }; class D1: public B1 //公有派生 { public: void display() { coutD1::display()endl; } }; void fun(B0 *ptr) //普通函数 { ptr-display(); } int main() //主函数 { B0 b0, *p; //声明基类对象和指针 B1

文档评论(0)

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

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

1亿VIP精品文档

相关文档