第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; }