当前位置: 首页 > news >正文

C++的多态性及其实现方式

多态性是 C++ 面向对象编程的重要特性之一,它允许不同的对象对同一消息做出不同的响应,提高了代码的灵活性和可扩展性。下面为你详细介绍 C++ 多态性的概念及其实现方式。

多态性的概念

多态性从字面上理解就是 “多种形态”。在 C++ 中,多态性使得可以使用统一的接口来处理不同类型的对象,而具体执行的操作则由对象的实际类型决定。这就好比现实生活中,不同的人对于 “吃饭” 这个指令,会有不同的行为,有的人细嚼慢咽,有的人狼吞虎咽。

实现方式

1. 静态多态(编译时多态)

  • 函数重载
    函数重载是指在同一个作用域内,可以定义多个同名函数,但这些函数的参数列表(参数的类型、个数或顺序)必须不同。编译器会根据调用函数时传递的实参来决定调用哪个重载函数。

cpp

#include <iostream>

// 函数重载示例
int add(int a, int b) {
    return a + b;
}

double add(double a, double b) {
    return a + b;
}

int main() {
    int result1 = add(1, 2);
    double result2 = add(1.5, 2.5);
    std::cout << "Integer addition result: " << result1 << std::endl;
    std::cout << "Double addition result: " << result2 << std::endl;
    return 0;
}

  • 运算符重载
    运算符重载允许程序员为自定义类型重新定义运算符的行为。通过运算符重载,可以让自定义类型的对象像内置类型一样使用运算符。

cpp

#include <iostream>

class Complex {
private:
    double real;
    double imag;
public:
    Complex(double r = 0, double i = 0) : real(r), imag(i) {}

    // 运算符重载
    Complex operator+(const Complex& other) {
        return Complex(real + other.real, imag + other.imag);
    }

    void display() {
        std::cout << real << " + " << imag << "i" << std::endl;
    }
};

int main() {
    Complex c1(1, 2);
    Complex c2(3, 4);
    Complex c3 = c1 + c2;
    c3.display();
    return 0;
}
2. 动态多态(运行时多态)

  • 虚函数和继承
    动态多态主要通过虚函数和继承来实现。在基类中声明虚函数,派生类可以重写这些虚函数。当通过基类指针或引用调用虚函数时,实际执行的是派生类中重写的函数,这一过程在运行时确定。

cpp

#include <iostream>

// 基类
class Shape {
public:
    // 虚函数
    virtual void draw() {
        std::cout << "Drawing a generic shape." << std::endl;
    }
};

// 派生类
class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a circle." << std::endl;
    }
};

// 派生类
class Square : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a square." << std::endl;
    }
};

int main() {
    Circle circle;
    Square square;

    Shape* shape1 = &circle;
    Shape* shape2 = &square;

    shape1->draw();
    shape2->draw();

    return 0;
}

总结

  • 静态多态在编译时确定调用的函数,通过函数重载和运算符重载实现,提高了代码的可读性和易用性。
  • 动态多态在运行时确定调用的函数,通过虚函数和继承实现,增强了代码的可扩展性和灵活性。

分享

http://www.dtcms.com/a/80255.html

相关文章:

  • conda 常用命令
  • 提升模型性能:数据增强与调优实战
  • 微信小程序:用户拒绝小程序获取当前位置后的处理办法
  • RabbitMQ的高级特性介绍(一)
  • 05_Z-Stack无线点灯
  • LeetCode hot 100—数组中的第K个最大元素
  • 【OpenGauss源码学习 —— (SortGroup算子)】
  • 蓝桥杯备考:数学问题模运算---》次大值
  • dfs(十八)98. 验证二叉搜索树
  • Linux 驱动开发笔记--1.驱动开发的引入
  • 海康ISAPI协议在智联视频超融合平台中的接入方法
  • CIR-Net:用于 RGB-D 显著性目标检测的跨模态交互与优化(问题)
  • 蓝桥杯十四届C++B组真题题解
  • DeDeCMS靶场获取wenshell攻略
  • 【B站电磁场】Transformer
  • 【QT5 多线程示例】互斥锁
  • QWen 和 DeepSeek 入门指南
  • 天梯赛 L2-012 关于堆的判断
  • 光谱仪与光谱相机的核心区别与协同应用
  • 使用 AnythingLLM 轻松部署本地知识库!
  • 雷池SafeLine-自定义URL规则拦截非法请求
  • 【MySQL】触发器与存储引擎
  • 基于开源模型的微调训练及瘦身打造随身扫描仪方案__用AI把手机变成文字识别小能手
  • 第二章 EXI协议原理与实现--7.5 Efficient XML库和OpenEXI.jar编解码交叉测试
  • Linux网络相关概念和重要知识(2)(UDP套接字编程、聊天室的实现、观察者模式)
  • XGBoost
  • 1987-2023年各省进出口总额数据整理(含进口和出口)(无缺失)
  • 目标检测中归一化的目的?
  • 大模型agent的构建
  • Python高级——类的知识