第04章继承性与多态性.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第04章继承性与多态性

* (2) 不能将一个声明为指向派生类对象的指针指向其基类的对象。 class Base //定义基类Base { //... }; class Derive:public Base //定义基类Base的公有派生类Derive { //... }; void main() { Base obj1; Derive obj2,*ptr; ptr=obj2; ptr=obj1; //错误!试图将派生类指针ptr指向基类对象 //... } * (3) 声明为指向基类对象的指针,当其指向派生类对象时,只能利用它来直接访问派生类中从基类继承来的成员,不能直接访问公有派生类中特定的成员。 class Base //定义基类Base { public: void show1(); }; //定义基类Base的公有派生类Derive class Derive:public Base { public: void show2(); }; void main() { Base obj1,*ptr;//定义基类指针 Derive obj2; ptr=obj1; ptr-show1(); ptr=obj2; //基类指针指向公有继承 ptr-show1();//访问基类成员 ptr-show2(); //错误!试图调用派生类的特定成员 //... } * 课后作业4 习题P112: 4-3 (1) (3) 4-4 (1) (2) 4-5 (2) (3) * 4. 多态性 “one interface multiple method ” (一个接口,多个实现) 多态:事物具有不同形式的能力。 对于不同的实例,某个操作可能会有不同的行为。此行为依赖于所要操作的对象。例如:加法操作,如果操作的数据是数,它对两个数求和;如果操作的数据是字符串,则它将连接两个字符串。 多态在实现继承的过程中被广泛应用。 在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要实现此行为。当对象接收到发送给它的消息时,根据该对象所属的类动态地选用在该类中定义的实现算法。 * 多态性的概念 多态性是面向对象程序设计的重要特征之一。 多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。 通俗地说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,即用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。 多态的实现: 函数重载 运算符重载 虚函数 * 函数重载 允许一个程序内声明多个名称相同的函数,函数的参数个数或参数类型不同,这些函数可以完成不同功能。 使用函数重载可以减轻用户的记忆负担,并使程序的结构简单、易懂。 函数重载分为: 成员函数重载 构造函数重载 * #include iostream.h #include math.h class My_class { public: int plus(int, int); double plus(double, double); }; int My_class::plus(int x, int y) { return x+y; } double My_class::plus(double x, double y) { return x-y; } void main() { My_class Data; coutThe result for plus(int,int) is Data.plus(5,10)endl; coutThe result for plus(double,double) isData.plus(5.0,10.0)endl; } 输出结果 The result for plus(int,int) is 15 The result for plus(double,double) is -5 (1)成员函数重载 * (2)构造函数重载 class sample { int i; public: sample(); sample(int); //定义重载的构造函数 } sample::sample() //定义构造函数sample { i=0;} sample:sample(int x) //定义构造函数sample(int) { i=x;} void main( ) { sample A; sample B(5); } * 4.3 运算符重载 C++中预定义的运算符的操作对象只能是基本数据类型。 [问题]用户自定义的类型(如类),也需要有类似的运算操作。 下面

文档评论(0)

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

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

1亿VIP精品文档

相关文档