打印
[牛人杂谈]

什么是C++的多态,你知道吗?在嵌入式编程中多态用处很大的

[复制链接]
1154|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yiyigirl2014|  楼主 | 2024-2-19 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有时候难得不是事情本身,而是这个名字是什么,你不理解,比如多态是什么?

C++ 中的多态是指同一函数调用可以根据对象的不同类型而执行不同的操作。这种特性使得代码更具灵活性和可扩展性,是面向对象编程的一个重要概念。C++ 实现多态性的方式主要有两种:虚函数(动态多态)和函数重载(静态多态)。

虚函数(动态多态): 虚函数是通过基类指针或引用调用的函数,可以在运行时动态地确定调用哪个版本的函数,具体取决于指针或引用指向的对象的类型。在基类中声明的虚函数,可以在派生类中重写,这样即使通过基类指针或引用调用该函数,实际执行的是派生类中的版本。


#include <iostream>

class Shape {
public:
    virtual void draw() {
        std::cout << "Drawing a shape\n";
    }
};

class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a circle\n";
    }
};

class Rectangle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a rectangle\n";
    }
};

int main() {
    Shape *shapePtr;

    Circle circle;
    Rectangle rectangle;

    shapePtr = &circle;
    shapePtr->draw(); // 实际调用的是Circle类的draw函数

    shapePtr = &rectangle;
    shapePtr->draw(); // 实际调用的是Rectangle类的draw函数

    return 0;
}
函数重载(静态多态): 函数重载允许你定义多个同名函数,但参数列表不同。编译器根据调用时提供的参数类型和数量来确定调用哪个版本的函数。这种多态性在编译时确定,因此称为静态多态。
#include <iostream>

void print(int num) {
    std::cout << "Integer: " << num << std::endl;
}

void print(double num) {
    std::cout << "Double: " << num << std::endl;
}

int main() {
    print(5);       // 调用print(int)
    print(3.14);    // 调用print(double)

    return 0;
}


使用特权

评论回复
沙发
yiyigirl2014|  楼主 | 2024-2-19 17:09 | 只看该作者
对于第一种的动态多态其实和C语言里面的函数指针用法类似,第二种的静态多态在嵌入式中应用较多。
例如接口函数,你可以根据参数不同调用不同的硬件接口,比如I2C,你可以根据参数选择使用硬件还是软件实现。在Arduino中屏幕驱动程序中经常用到这个方法。

使用特权

评论回复
板凳
598330983| | 2024-2-28 22:26 | 只看该作者
一个函数名,可以根据不同的参数调用不同的函数实体。

使用特权

评论回复
地板
ClarkLLOTP| | 2024-3-5 16:43 | 只看该作者
虚函数会不会占很多空间啊

使用特权

评论回复
5
maqianqu| | 2024-3-5 20:42 | 只看该作者
多态是C++面向对象编程的一个重要特性,它允许不同类的对象对同一消息做出响应。

使用特权

评论回复
6
yorkbarney| | 2024-3-6 07:27 | 只看该作者
使用多态性可以帮助减少代码重复,提高代码的可维护性。但是,在嵌入式系统中,需要注意多态性可能会带来的性能开销,尤其是在处理大量数据或实时操作时。因此,在利用多态性的同时,也需要权衡其对系统性能和资源的影响。

使用特权

评论回复
7
uytyu| | 2024-3-7 11:29 | 只看该作者
在嵌入式编程中,多态特别有用,因为它可以提高代码的可重用性和可维护性。例如,如果我们有一个基类,它定义了一些通用的行为,然后有多个派生类,它们各自实现了这些行为的具体细节,那么我们可以编写一个只与基类交互的函数,而不需要关心具体的派生类。这样,当我们需要添加一个新的派生类时,我们只需要实现基类中定义的行为,而不需要修改任何现有的代码。

使用特权

评论回复
8
mollylawrence| | 2024-3-7 21:00 | 只看该作者
在嵌入式系统中,组件之间的解耦是非常重要的。使用多态可以将组件之间的接口抽象出来,从而使得组件之间的依赖关系降低,提高了系统的可扩展性和可维护性。

使用特权

评论回复
9
wilhelmina2| | 2024-3-7 23:09 | 只看该作者
多态性是面向对象编程(OOP)中的一个核心概念,它允许对象采用多种形式。在C++中,多态性主要通过继承(inheritance)和接口(interfaces)来实现。

使用特权

评论回复
10
kkzz| | 2024-3-8 21:10 | 只看该作者
在嵌入式编程中,多态性的用处可能不如桌面或服务器应用程序那么明显,因为嵌入式系统通常更关注性能和资源消耗。然而,多态性仍然有一些用处,尤其是在需要构建可扩展和模块化的系统时。例如,你可以定义一个通用的接口,然后为不同的硬件组件实现这个接口,这样就可以使用统一的编程模型来操作不同的硬件设备。

使用特权

评论回复
11
jackcat| | 2024-3-9 17:07 | 只看该作者
C++的多态(Polymorphism)是指程序设计中允许不同的类共享相同的接口,并根据对象所属的实际类型来调用相应的方法,从而表现出不同的行为。多态是面向对象编程(OOP)三大特性之一(封装、继承和多态)的重要组成部分。

使用特权

评论回复
12
uytyu| | 2024-3-9 21:17 | 只看该作者
C++的多态是指在不同类中具有相同名称的成员函数或操作符可以根据对象的实际类型表现出不同的行为。多态允许您使用基类指针或引用来调用派生类的成员函数,从而实现了接口的统一和代码的复用。

使用特权

评论回复
13
hilahope| | 2024-3-10 17:00 | 只看该作者
C++的多态是一种面向对象编程的特性,它允许通过一个统一的接口来访问和操作不同类型的对象。多态的实现主要依赖于虚函数和抽象类。通过多态,我们可以编写更加通用和可重用的代码,提高程序的灵活性和可扩展性。

使用特权

评论回复
14
wilhelmina2| | 2024-3-11 15:23 | 只看该作者
在嵌入式系统中,设备驱动程序通常需要与硬件设备进行交互。使用多态可以将设备驱动程序的通用接口抽象出来,从而使得不同类型的硬件设备可以使用相同的驱动程序代码。

使用特权

评论回复
15
mmbs| | 2024-3-11 18:59 | 只看该作者
在嵌入式编程中,多态的用处可能不像在大型软件系统中那么明显,但仍然有几个场合可以使用多态:

硬件抽象层(HAL):多态可以用于创建硬件抽象层,这样可以在不更改上层代码的情况下更换硬件。例如,你可以为不同的传感器或通信接口创建基类,并在派生类中实现特定的硬件细节。
插件架构:在嵌入式系统中,有时需要动态地添加或移除功能。通过使用多态,你可以创建一个插件架构,其中每个插件都是一个派生类,而主程序通过基类指针与插件交互。
状态机:多态可以用于实现状态机,其中不同的状态可以由不同的派生类表示。这样,你可以根据当前状态动态地改变行为。
回调和事件处理:多态可以用于实现回调和事件处理机制。例如,你可以定义一个基类来表示事件处理程序,并在不同的派生类中实现特定的事件处理逻辑。

使用特权

评论回复
16
51xlf| | 2024-3-11 22:34 | 只看该作者
C++的多态是面向对象编程(OOP)中的一个核心概念,它允许在不同的派生类中以统一的方式处理不同的对象。多态性使得我们能够编写通用、灵活的代码,这些代码不依赖于特定的数据类型,而是依赖于一组定义好的接口。

使用特权

评论回复
17
linfelix| | 2024-3-12 12:25 | 只看该作者
在C++中,多态主要通过虚函数和运行时类型信息(RTTI)来实现。虚函数是在基类中声明的,并在派生类中重写的成员函数。当通过基类指针或引用调用虚函数时,将根据对象的实际类型调用相应的派生类函数。这使得您可以编写更通用的代码,而不需要知道对象的具体类型。

使用特权

评论回复
18
backlugin| | 2024-3-12 16:06 | 只看该作者
多态的两个主要形式是:

静态多态(编译时多态):在编译时确定函数调用,基于函数参数的类型。C++中通过函数重载和运算符重载实现静态多态。

动态多态(运行时多态):在运行时确定函数调用,基于对象的实际类型。C++中通过虚函数实现动态多态。

使用特权

评论回复
19
timfordlare| | 2024-3-14 13:44 | 只看该作者
多态意味着“多种形态”。在C++中,多态允许你通过基类指针或引用调用派生类中的函数。这通常是通过在基类中声明虚函数并在派生类中重写这些函数来实现的。

使用特权

评论回复
20
febgxu| | 2024-3-14 18:47 | 只看该作者
在嵌入式编程中,多态有以下主要用途:

系统解耦:通过多态特性,可以将系统中的各个模块解耦,使得模块间的关系更加清晰,便于理解和维护。

代码复用:多态可以让我们编写更加通用的代码,减少重复劳动,提高编程效率。

系统扩展:多态使得系统具有更好的可扩展性。当添加新的功能或修改现有功能时,可以尽量减少对已有代码的影响。

功能抽象:多态可以将复杂的功能抽象为简单的接口,使得程序结构更加简洁,易于理解和使用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

199

主题

3461

帖子

10

粉丝