有时候难得不是事情本身,而是这个名字是什么,你不理解,比如多态是什么?
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;
- }
|