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

【C++】动态多态(运行时多态)

#include <iostream>
using namespace std;
#define xuhanshu
class Animal {
public:
    // 虚函数,允许在派生类中重写,也允许不重写,基类默认行为
#ifdef xuhanshu
    virtual void sound() const {
        cout << "Animal makes a sound" << endl;
    }
#elif defined(chunxuhanshu)
    //纯虚函数:定义接口,必须重写实现
    virtual void sound() const = 0;
#endif
};

class Dog : public Animal {
public:
    void sound() const override {
        cout << "Dog barks" << endl;
    }
};

class Cat : public Animal {
public:
    void sound() const override {
        cout << "Cat meows" << endl;
    }
};

void makeSound(const Animal& animal) {
    animal.sound();  // 基于实际对象类型调用正确的函数
}

int main() {
    Dog dog;
    Cat cat;
    makeSound(dog);  // 输出: Dog barks
    makeSound(cat);  // 输出: Cat meows
    return 0;
}

虚函数:基类默认有实现,可以不需要重写,也可以重写;

纯虚函数:基类没有实现,必须要重写。

Dog和Cat类均继承了Animal类,并对Sound函数进行了重写。

静态多态:函数重载或运算符重载

class Printer
{
public:
    void print(int i)
    {
        cout << int i << endl;
    }
    void print(double i)
    {
        cout << double i << endl;
    }
}
int main()
{
    Printer P;
    P.print(1);
    P.print(1.111);
    return 0;
}


http://www.kler.cn/news/354509.html

相关文章:

  • learn C++ NO.25——unordered_set与unordered_map的封装
  • Vue main.js引入全局changePassword组件原型实例,修改密码组件原型实例
  • unity静态批处理
  • Redis学习笔记:数据结构
  • Linux中安装 mongodb ,很详细
  • 2024年Python最受欢迎桑基图
  • 【LeetCode每日一题】——523.连续的子数组和
  • Qt入门教程:创建我的第一个小程序
  • 【YOLOv11】使用yolov11训练自己的数据集 /验证 /推理 /导出模型/ ONNX模型的使用
  • 【服装识别】Python+卷积神经网络算法+人工智能+深度学习+算法模型训练+Django网页界面+TensorFlow
  • JavaScript 第18章:安全性
  • 前端学习---(1)HTML
  • 如何使用C#实现Padim算法的训练和推理
  • 结构型-适配器模式
  • map和set的模拟实现
  • this指针—静态成员—单例模式
  • Spring AI Java程序员的AI之Spring AI(三)RAG实战
  • 排序算法上——插入,希尔,选择,堆排序
  • PTA L1系列题解(C语言)(L1_065 -- L1_072)
  • 无源雷达的直达波抑制--自适应信号算法