【C++】面向对象三大巨头之“多态”

目录

1.多态是什么

1.1多态的定义

字面意思理解

从技术层面理解

1.2多态的作用

1.3多态的分类

1. 3.1静态多态

 1.3.2动态多态

1.3.3静态分类和动态分类的区别

2.多态的实现方式

2.1.1虚函数

2.1.2虚函数的重写

2.1.3纯虚函数与抽象类

纯虚函数

抽象类

2.2继承

2.3虚析构和纯虚析构

3.多态的优点

3.1代码复用

3.2可扩展性

3.3可维护性

4.多态的应用场景

4.1图形绘制系统

4.2游戏开发

4.3设备驱动程序


1.多态是什么

1.1多态的定义

  • 字面意思理解

从字面意思理解即“多种形态”,在C++中,多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

  • 从技术层面理解

从技术层面来讲,C++中的多态主要是通过纯虚函数来实现。当一个函数被声明为虚函数时,它在派生类中可以被重新定义(重写)。通过基类的指针与或引用调用虚函数时,实际调用的是指向对象所属类的重写版本,这也是所谓的动态绑定,也是实现运行时多态的关键机制。

例如:定义一个基类Animal,其中包含一个虚函数makeSound,然后派生出Dog和Cat类,分别重写makeSound函数以实现不同的声音。当使用Animal类型的指针或引用指向Dog或Cat对象,并调用makeSound函数时,会根据实际指向的对象类型调用相应的声音实现

1.2多态的作用

多态的作用主要体现在提高代码的灵活性,可维护性和可扩展性。通过多态,我们可以编写通用的代码,而无需为每个具体的对象类型编写特定的处理逻辑。这使得代码更加简洁、易于理解和维护。

1.3多态的分类

1. 3.1静态多态
  • 函数重载(Function Overloading)

定义:在同一个类中,可以定义多个同名的函数,但是这些函数的参数列表(参数的个数、类型、顺序)不同。编译器会根据调用函数时传递的实际参数来确定要调用的具体函数版本。

例如,在一个计算图形面积的类中,可以有两个名为area的函数。一个用于计算圆形的面积,参数是半径(double radius),计算公式是3.14 * radius * radius;另一个用于计算矩形的面积,参数是长和宽(double length, double width),计算公式是length * width。当在代码中调用area函数时,编译器会根据传入的参数类型和数量来决定是调用计算圆形面积的函数还是计算矩形面积的函数。

  • 运算符重载(Operator Overloading)

定义:允许用户重新定义 C++ 中的大多数运算符,使它们能够按照用户自定义的方式来操作对象。通过运算符重载,可以让自定义类型(如类)像基本数据类型一样使用运算符进行运算。

例如,对于一个复数类Complex,可以重载+运算符来实现两个复数相加。假设复数类有两个成员变量real(实部)和imag(虚部),重载+运算符的函数可以这样定义:Complex operator+(const Complex& other) { return Complex(real + other.real, imag + other.imag); }。这样,当有两个复数对象c1c2时,可以像c3 = c1 + c2这样直接使用+运算符来计算它们的和。

 1.3.2动态多态
  • 虚函数(Virtual Functions)

定义:在基类中声明一个虚函数,在派生类中可以重新定义这个虚函数。当通过基类指针或引用调用这个函数时,程序会根据指针或引用所指向的实际对象类型来决定调用基类的函数版本还是派生类的函数版本。

例如,有一个基类Shape,其中有一个虚函数draw。然后有两个派生类CircleRectangle,它们都重写了draw函数来实现各自形状的绘制逻辑。如果有一个Shape*类型的指针,它可以指向Circle对象或者Rectangle对象。当通过这个指针调用draw函数时(如shapePtr->draw()),程序会根据shapePtr实际指向的是Circle还是Rectangle来调用对应的draw函数版本。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值