《面向对象程序设计》课程教学资源(PPT课件)第12章 多态性

第12章多态性12.1多态性概述12.2派生类对象替换基类对象12.3虚函数12.5运算符重载12.4抽象类程序设计举例
0 第12章 多态性 12.1 多态性概述 12.2 派生类对象替换基类对象 12.3 虚函数 12.5 运算符重载 12.4 抽象类 程序设计举例

12.1多态性概述多态性:对象在接收相同消息时,所做出的响应不同。利用多态性技术,可以调用同名函数,实现完全不同的功能分类(1)编译时的多态性:同一类的不同对象或同一对象在不同环境下调用同名成员函数,所完成的功能不同通过函数的重载和运算符的重载来实现的。(2)运行时的多态性:属于同一基类的不同派生类对象,在形式上调用基类的同一成员函数,而实际上调用的是各自派生类的同名成员函数。它是通过类继承关系和虚函数来实现的
1 12.1 多态性概述 多态性:对象在接收相同消息时,所做出的响应不同。 利用多态性技术,可以调用同名函数,实现完全不同的功能 分类: (1)编译时的多态性:同一类的不同对象或同一对象在不同 环境下调用同名成员函数,所完成的功能不同 通过函数的重载和运算符的重载来实现的。 (2)运行时的多态性: 属于同一基类的不同派生类对象,在形式上调用基类的同 一成员函数,而实际上调用的是各自派生类的同名成员函 数。 它是通过类继承关系和虚函数来实现的

编译时多态性函数重载(兔子逃生)class兔子public:void逃生(老鹰a)(“兔子鹰:: 1void逃生(狼b)“动如脱兔1:
2 编译时多态性—— 函数重载(兔子逃生) class 兔子 { public: . void 逃生(老鹰a){“兔子蹬鹰”;} void 逃生(狼 b){“动如脱兔”;} . };

运行时的多态性Ⅱ宠物classPet( public:void speak()( cout<<"zzz"; };1;classCat:public Pet(public:void speak()( cout<<"miao!miao!";;class Dog:public Petpublic:宁void speak()cout<<"wang!wang!";)3;
3 运行时的多态性 class Pet //宠物 { public: void speak() { cout<< "zzz"; }; }; class Cat : public Pet { public: void speak() { cout<< "miao!miao!"; } }; class Dog : public Pet { public: void speak() { cout<< "wang!wang!"; } };

int main()IIp为宠物类指针{ Pet *p ;Catcat1;定义猫类对象Dogdog1;定义狗类对象int n;cin>>n;根据用户输入将猫或狗对象地址赋给p指针if(n==1)p=&cat1;elsep=&dog1;p->speak() ;return 0;
4 int main() { Pet *p; //p为宠物类指针 Cat cat1; //定义猫类对象 Dog dog1; //定义狗类对象 int n; cin>>n; //根据用户输入将猫或狗对象地址赋给p指针 if(n==1) p = &cat1; else p = &dog1; p->speak(); return 0; }

12.2派生类对象替换基类对象原则凡是基类对象出现的场合都可以用公有派生类对象取代对象替换常用的形式:(1)派生类对象给基类对象赋值(2)派生类对象可以初始化基类对象的引用(3)可以令基类对象的指针指向派生类对象,即将派生类对象的地址传递给基类指针注:派生类对象替换基类对象后,只能当作基类对象使用
5 12.2 派生类对象替换基类对象 原则 凡是基类对象出现的场合都可以用公有派生类对象取代 , 对象替换常用的形式 : (1)派生类对象给基类对象赋值 (2)派生类对象可以初始化基类对象的引用 (3)可以令基类对象的指针指向派生类对象,即将派生 类对象的地址传递给基类指针 注:派生类对象替换基类对象后,只能当作基类对象使用

例12-1派生类对象替换基类对象宠物classPet( public:void speak()( cout<<" How does a pet speak ?"; };1;classCat:public Pet(public:void speak()(cout<<"miao!miao!";);class Dog:public Petpublic:宁void speak()cout<<"wang!wang!";)3;
6 例12-1 派生类对象替换基类对象 class Pet //宠物 { public: void speak() { cout<< " How does a pet speak ? "; }; }; class Cat : public Pet { public: void speak() { cout<< "miao!miao!"; } }; class Dog : public Pet { public: void speak() { cout<< "wang!wang!"; } };

int main(){Pet pet,*p1;/基类对象指针p1,基类对象petDog dog1;Cat cat1;Ⅱ用Dog类对象给Pet类对象赋值pet = dog1;pet.speak();p1 = &cat1;Ⅱ用Cat类对象地址给基类指针赋值p1->speak();
7 int main() { Pet pet, *p1; //基类对象指针p1, 基类对象pet Dog dog1; Cat cat1; pet = dog1; //用Dog类对象给Pet类对象赋值 pet.speak(); p1 = &cat1; //用Cat类对象地址给基类指针赋值 p1->speak();

p1=&dog1;I用Dog类对象地址给基类指针赋值p1->speak();以Cat类对象初始化Pet类引用Pet &pet2=cat1:pet2 .speak();return 0;speak?HowdoespetHowpet speak?doesaapet speak?Howdoesaspeak?Howdoespeta0
8 p1 = &dog1; //用Dog类对象地址给基类指针赋值 p1->speak(); Pet &pet2 = cat1; //以Cat类对象初始化Pet类引用 pet2 .speak(); return 0; }

12.3虚函数虚函数的定义定义:在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数语法:函数返回类型virtual函数名(参数表)函数体人Y用途实现多态性,通过指向派生类的基类指针或基类对象的引用,访问派生类中同名覆盖成员函数
9 12.3 虚函数 一、虚函数的定义 定义: 在某基类中声明为 virtual 并在一个或多个派生类中 被重新定义的成员函数 语法: virtual 函数返回类型 函数名(参数表) { 函数体 } 用途: 实现多态性,通过指向派生类的基类指针或基类对 象的引用,访问派生类中同名覆盖成员函数
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《面向对象程序设计》课程教学资源(课件讲稿)第11章 类(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第10章 结构(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第21章 异常处理(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第20章 模板(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第19章 IO流(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第18章 运算符重载(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第17章 多态(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第16章 继承(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第15章 静态成员函数与友元(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第14章 堆与拷贝构造函数(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第13章 面向对象程序设计(PPT).ppt
- 《面向对象程序设计》课程教学资源(课件讲稿)第12章 构造函数(PPT).ppt
- 《C语言》课程资源_智慧树使用手册_学生端使用手册.ppt
- 《C语言》课程教学课件(PPT讲稿)第25次课(函数定义、调用、参数传递、返回值).ppt
- 《C语言》课程教学课件(PPT讲稿)第27次课(函数进一步讨论).ppt
- 《C语言》课程教学课件(PPT讲稿)第29次课 结构体.ppt
- 《C语言》课程教学课件(PPT讲稿)第31次课(编译预处理命令 位运算 文件).ppt
- 《C语言》课程教学资源(教程讲义)C语言程序设计新思路(1-3章).pdf
- 《C语言》课程教学课件(PPT讲稿,教程)第1章 引论.ppt
- 《C语言》课程教学课件(PPT讲稿,教程)第2章 基本的数据与运算.ppt
- 《面向对象程序设计》课程教学资源(PPT课件)第13章 模板与异常处理.ppt
- 《面向对象程序设计》课程教学资源(PPT课件)第14章 标准库和输入输出流.ppt
- 《面向对象程序设计》课程教学资源(PPT课件)第15章 链表.ppt
- 《面向对象程序设计》课程教学资源(PPT课件)第9章 类和对象(一).ppt
- 《面向对象程序设计》课程教学资源(PPT课件)第10章 类和对象(二).ppt
- 《面向对象程序设计》课程教学资源(PPT课件)第11章 继承和派生.ppt
- 山东理工大学:《面向对象程序设计》课程实验指导书(C++).pdf
- 山东理工大学:《计算机绘图AutoCAD》课程教学资源(PPT课件)第4章 AutoCAD尺寸标注.pdf
- 山东理工大学:《计算机绘图AutoCAD》课程教学资源(PPT课件)第5章 AutoCAD绘制机械图样表达.pdf
- 山东理工大学:《计算机绘图AutoCAD》课程教学资源(PPT课件)第6章 AutoCAD绘制机械工程图.ppt
- 山东理工大学:《计算机绘图AutoCAD》课程教学资源(PPT课件)第1章 AutoCAD设计基础.ppt
- 山东理工大学:《计算机绘图AutoCAD》课程教学资源(PPT课件)第2章 AutoCAD绘图平面图形.ppt
- 山东理工大学:《计算机绘图AutoCAD》课程教学资源(PPT课件)第3章 AutoCAD绘制形体视图.pdf
- 清华大学出版社:《计算机绘图AutoCAD》课程教学课件(PPT讲稿)第6章 AutoCAD绘制机械工程图.ppt
- 清华大学出版社:《计算机绘图AutoCAD》课程教学课件(PPT讲稿)第7章 实训.ppt
- 清华大学出版社:《计算机绘图AutoCAD》课程教学课件(PPT讲稿)第1章 AutoCAD设计基础.ppt
- 清华大学出版社:《计算机绘图AutoCAD》课程教学课件(PPT讲稿)第2章 AutoCAD绘图平面图形.ppt
- 清华大学出版社:《计算机绘图AutoCAD》课程教学课件(PPT讲稿)第3章 AutoCAD绘制形体视图.ppt
- 清华大学出版社:《计算机绘图AutoCAD》课程教学课件(PPT讲稿)第4章 AutoCAD尺寸标注.ppt
- 清华大学出版社:《计算机绘图AutoCAD》课程教学课件(PPT讲稿)第5章 AutoCAD绘制机械图样.ppt
