C++ | 多态

一、什么是多态?

多态(Polymorphism)是面向对象编程的三大核心特性之一(封装、继承、多态),源自希腊语"poly"(多)和"morph"(形态)。它允许不同对象对同一消息做出不同响应,极大提高了代码的灵活性和可扩展性。

二、C++多态的类型

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

  • 函数重载

    void print(int i) { cout << "整数: " << i; }
    void print(string s) { cout << "字符串: " << s; }
  • 运算符重载

    class Vector {
    public:
        Vector operator+(const Vector& other) { /* 向量相加实现 */ }
    };

2. 运行时多态(动态多态)

通过虚函数和继承实现,核心机制是虚函数表(vtable)

三、虚函数实现原理

1. 基础用法

class Animal {
public:
    virtual void speak() { cout << "动物叫声"; }
};

class Dog : public Animal {
public:
    void speak() override { cout << "汪汪!"; }
};

// 使用
Animal* animal = new Dog();
animal->speak(); // 输出"汪汪!"

2. 虚函数表机制

  • 每个包含虚函数的类都有一个虚函数表

  • 对象内部包含指向vtable的指针(vptr)

  • 调用时通过vptr查找虚函数地址

四、纯虚函数与抽象类

class Shape {
public:
    virtual double area() = 0; // 纯虚函数
};

class Circle : public Shape {
public:
    double area() override { return 3.14 * r * r; }
};

特点:

  • 包含纯虚函数的类成为抽象类

  • 不能实例化,只能被继承

  • 强制子类实现接口

五、多态的优势对比

特性编译时多态运行时多态
实现方式函数重载/模板虚函数
绑定时机编译期运行期
性能更高稍低(虚表查询)
灵活性较低更高
典型应用运算符重载接口实现

六、实际应用场景

  1. 插件架构开发

    class Plugin {
    public:
        virtual void execute() = 0;
    };
    
    // 动态加载不同插件实现
  2. 游戏角色系统

    class Character {
    public:
        virtual void attack() = 0;
    };
    
    class Warrior : public Character { /* 实现 */ };
    class Mage : public Character { /* 实现 */ };
  3. 数据处理框架

    class DataProcessor {
    public:
        virtual void process(const Data& data) = 0;
    };
    
    // 派生不同格式处理器:JSON、XML、CSV...

七、注意事项与最佳实践

  1. 虚析构函数原则

    class Base {
    public:
        virtual ~Base() = default; // 必须声明虚析构
    };
  2. 避免虚函数滥用带来的性能损耗

  3. override关键字确保正确覆盖

  4. 遵循面向对象设计原则(开闭原则、里氏替换原则)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值