C++_18_多态 - 重写版
多态:
面向对象三大概念:封装、继承、多态!可想而知多态是何等的重要
什么是多态?
简单来讲就是通过 “虚函数” + “指向子类对象的父类指针”,实现对基类派生出来的不同子类的“统一操作”的过程,实际上就是实现“操作”代码复用;
因为子类都是由统一父类派生出来的,因此可以通过共同父类 “虚函数” 操作子类,再通过 “指向子类对象的父类指针” 做统一操作
因此要想形成多态必须具备以下三个条件:
1、必须存在继承关系;
2、继承关系中必须有同名的虚函数;----- 通过父类虚函数实现子类重写,实现子类多态度操作;
(函数类内定义前加 virtual)(虚函数存在的意义就是为实现多态,是以继承为基础才形成的概念)
3、存在指向子类对象的父类指针或引用 ----- 通过该指针或引用调用到父类虚函数,再通过虚函数执行对于子类函数操作
导致=====>>>》 基类指针或引用指向哪个(基类或者派生类的)虚函数,就执行哪个(基类或者派生类的)虚函数
顶层函数属于实现特定功能的函数,和类的概念有些区别,属于对象那个层次的函数
#include <iostream>
using namespace std;
//父类
class Human{
public:
virtual void toilet() = 0;
};
//子类1
class Man:public Human{
public:
void toilet(){
cout<<"我去男厕所"<<endl;
}
};
//子类2
class Woman:public Human{
public:
void toilet(){
cout<<"我去女厕所"<<endl;
}
};
//子类3
class Non:public Human{
public:
void toilet(){
cout<<"我去无性别厕所"<<endl;
}
};
//多态复用函数
void func(Human * human){
human->toilet();
}
int main(){
Man man1,man2,mnan3;
Woman woman1,woman2,woman3;
Non non1,non2,non3;
func(&man1); //我去男厕所
func(&woman2); //我去女厕所
func(&non3); //我去无性别厕所
return 0;
}
zl@DESKTOP-7K59BF4:/mnt/c/Users/ZL/Desktop$ ./12
我去男厕所
我去女厕所
我去无性别厕所
多态的概念以及前提条件:
编译期绑定(静态联编):函数入口地址和函数名在编译期间绑定,即编译期间确定函数名和入口地址唯一对应
运行期绑定(动态联编):函数入口地址和函数名在编译期间不绑定,反而在运行程序时才根据需要再动态组合绑定
多态:就是要做到同一个函数名在调用的时候,可以根据需求随时绑定不同的入口地址,实现不同函数对应的效果!
直白理解就是函数名还是那一个,只不过在具体执行时候借助函数名绑定的指针(存放入口地址)存入不同的入口地址(不同的类的)

浙公网安备 33010602011771号