深入理解 C++ 多态

“多态”这个词意味着拥有多种形式。在 C++ 中,多态的概念可以应用于函数和运算符。同一个函数名在不同的情况下可以表现出不同的行为。同样,一个运算符在不同的上下文中使用时,其工作方式也会有所不同。

!Poly多态的类型

1. 编译时多态

编译时多态也被称为早期绑定静态多态。在这种类型的多态中,编译器根据上下文决定函数或运算符将如何工作。这种多态是通过函数重载或运算符重载来实现的。

A. 函数重载

函数重载是面向对象编程的一个特性,它允许两个或更多的函数拥有相同的名称,但针对不同的参数表现出不同的行为。这些函数被称为重载;因此,这被称为函数重载。函数可以通过改变参数的数量改变参数的类型来进行重载。

C++


CODEBLOCK_d83cc61b

Output

Integer Sum = 12
Float Sum = 11.5

解释: 在上面的例子中,定义了两个add()函数,它们具有相同的名称但参数类型不同:一个用于整数,一个用于浮点数。在编译时,根据传递的参数类型调用正确版本的add()函数,从而允许同一个函数名用于不同的数据类型。

B. 运算符重载

C++ 能够为特定数据类型赋予运算符特殊的含义,这种能力被称为运算符重载。例如,我们可以对字符串使用加号运算符 (+) 来连接两个字符串,或者对整数使用它来将两个整数相加。<<>> 运算符原本是二进制移位运算符,但也被用于输入和输出流。这正是因为有了运算符重载才成为可能。

CPP


CODEBLOCK_f25008b9

Output

12 + i9

通常情况下,像 +、- 等运算符不适用于用户定义的类,因为它们不知道该如何处理这些对象。运算符重载允许我们为用户定义的数据类型(就像我们在本程序中对Complex 类所做的那样)定义这些运算符的行为。

> 在 C++ 中,大多数运算符都可以被重载以用于用户定义的类型。然而,少数运算符如 INLINECODE764079d1、INLINECODE2f9f1775、INLINECODEa6e8d4e8、INLINECODEfd6d5441 和 sizeof 不能被重载,因为它们是语言核心行为的基础。这些限制保证了代码的清晰性和编译器的完整性。

2. 运行时多态

运行时多态也被称为后期绑定动态多态。在运行时多态中,函数调用是在运行时才解析的,这与编译时多态形成了对比,后者由编译器在编译阶段决定绑定哪个函数调用。运行时多态是使用函数重载配合虚函数来实现的。

函数重写

函数重写发生在派生类定义基类的一个或多个成员函数时。那个基类函数被称为被重写了。要实现运行时多态,基类函数必须被声明为虚函数

C++


CODEBLOCK_625ceaed

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/49508.html
点赞
0.00 平均评分 (0% 分数) - 0