“多态”这个词意味着拥有多种形式。在 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