【北上广深杭大厂编程面试题】C++篇…这里介绍C++是如何实现多态的?(一)
【北上广深杭大厂编程面试题】C++篇…这里介绍C++是如何实现多态的?(一)
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议详细信息可参考:https://ais.cn/u/EbMjMn
前言
C++ 中的 多态 是面向对象编程(OOP)中的一个重要特性,它允许不同的对象对同一个消息作出不同的响应。具体来说,C++ 的多态通常分为两种类型:
- 编译时多态(静态多态)
- 运行时多态(动态多态)
1. 编译时多态(静态多态)
编译时多态指的是在编译期间就确定了调用的函数版本,它通过函数重载和运算符重载来实现。C++ 允许我们在同一个作用域内定义多个函数或运算符,它们具有相同的名称,但是参数的类型、个数或顺序不同。
常见实现方式:
- 函数重载:同名的函数可以根据参数不同来区分。
- 运算符重载:C++允许用户定义自定义运算符(如
+
、-
等)。
示例:函数重载
#include <iostream>
using namespace std;
class Print {
public:
void display(int i) {
cout << "Displaying integer: " << i << endl;
}
void display(double d) {
cout << "Displaying double: " << d << endl;
}
void display(const string& s) {
cout << "Displaying string: " << s << endl;
}
};
int main() {
Print p;
p.display(5); // 调用 display(int)
p.display(3.14); // 调用 display(double)
p.display("Hello"); // 调用 display(string)
return 0;
}
示例:运算符重载
#include <iostream>
using namespace std;
class Complex {
private:
int real, imag;
public:
Complex(int r, int i) : real(r), imag(i) {}
// 运算符重载 +
Complex operator+(const Complex& other) {
return Complex(real + other.real, imag + other.imag);
}
void display() {
cout << real << " + " << imag << "i" << endl;
}
};
int main() {
Complex c1(2, 3), c2(4, 5);
Complex c3 = c1 + c2; // 使用重载的 + 运算符
c3.display(); // 输出 6 + 8i
return 0;
}
- 注意:编译时多态是通过函数或运算符的重载来实现的,而不是动态类型判断。
总结
- 编译时多态:通过函数重载和运算符重载实现。编译器在编译期间确定调用哪个函数版本。
- 运行时多态:通过虚函数和继承实现。C++ 在运行时通过动态绑定根据实际对象类型调用相应的函数版本。
- 纯虚函数与抽象类:用于设计接口或抽象类,要求派生类实现特定的功能。
多态是 C++ 强大的面向对象特性之一,它使得程序更具扩展性和灵活性,尤其在需要统一接口的场景下非常有用。
下节请参考:【北上广深杭大厂编程面试题】C++篇…这里介绍C++是如何实现多态的?(二)