- 1、本文档共140页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章类与对象 ----多态性 面向对象程序设计的重要概念 类与对象 什么是多态性? 实现“一种接口,多种方法”的技术 授 课 内 容 5.7.1 多态性基本概念 5.7.2 派生类对象替换基类对象 5.7.3 虚函数 5.7.4 抽象类 5.7.5 运算符重载 教学目标与学习要求 理解多态性的基本思想 5.7.1 多态性基本概念 多态性含义 多态性的形式 1、多态性含义 实现“一种接口,多种方法”的技术 某类的对象在接受同样的消息时,做出不同的响应 2、多态性的形式 1)编译时多态性 1)编译时多态性—函数重载 class 兔子 { public: …… …… …… }; 2)运行时多态性----虚函数 class Pet { public: void speak() { cout zzz; }; … }; 例2:cat or dog ?(续) void main() { …… Pet *p; //p为宠物类指针 Cat cat1; //定义猫类对象 Dog dog1; //定义狗类对象 5.7.2 派生类对象替换基类对象 原则 凡是基类对象出现的场合都可以用公有派生类对象取代 5.7.3 虚函数 定义: 在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数 例2 虚函数实现多态性 class Pet { public: virtual void speak() { cout zzzendl; }; }; class Cat : public Pet { public: virtual void speak() { cout miao!miao!endl; } }; class Dog : public Pet { public: virtual void speak() { cout wang!wang!endl; } }; 虚函数的使用限制 应通过指针或引用调用虚函数,而不要以对象名调用虚函数. 在派生类中重定义的基类虚函数仍为虚函数,同时可以省略virtual关键字 不能定义虚构造函数,可以定义虚析构函数 注意: 当在派生类中定义了一个与基类成员函数同名的成员函数时,只要该成员函数的参数个数和相应类型以及它的返回类型与基类中同名的虚函数完全一样,则无论该成员函数是否使用 virtual修饰,它都将成为一个虚函数。 例: class B { … public: virtual void Print(); //定义虚函数 }; 关于赋值兼容(派生类对象替换基类对象) 赋值兼容性规则是指在需要基类对象的地方可以使用公有派生类的对象来替代。通过公有继承,派生类继承了基类除了构造函数和析构函数之外的所有成员,所以,凡是基类能够工作的地方,派生类都能够正常工作。 赋值兼容性规则主要包括以下几种情况: 1) 派生类的对象可以赋值给基类对象。 2) 派生类的对象可以初始化基类的引用。 3) 派生类的地址可以赋值给指向基类的指针。 例: 使用虚函数 #include iostream.h class B { public: void Print() { coutB calledendl; } virtual void PrintVirtul() { coutVirtul: B calledendl; } }; 例: 使用虚函数(续) void main() { D d1; B b1; D *pD1=new D; B *pB1=new B; cout没有使用虚函数,没有使用赋值兼容规则的结果endl; d1.Print(); b1.Print(); pD1-Print( ); pB1-Print( ); B *pB2=new D; D d2; B d22=d1; cout没有使用虚函数,使用赋值兼容规则的结果endl; pB2-Print( ); d22.Print( ); 例: 使用虚函数(续) D d3; B b3; D *pD3=new D; B *pB3=new B; cout使用虚函数函数,没有使用赋值兼容规则的结果endl; d3.Pri
文档评论(0)