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

21天学通C++——11多态(引入多态的目的)

多态:

利用不同类似的方法处理不同类似的对象

笔记原因:

既然继承可以进行基类的方法覆盖,为什么还要引入多态呢?

解释原因:

继承

class Base {
public:
    void func() {
        std::cout << "Base::func()" << std::endl;
    }
};
class Derived : public Base {
public:
    void func() {
        std::cout << "Derived::func()" << std::endl;
    }
};


int main() {
    Derived d;
    Base* p = &d;
    p->func();
    return 0;
}

结果为Base::func()

引入多态(Virtual) 

class Base {
public:
    virtual void func() {
        std::cout << "Base::func()" << std::endl;
    }
};
class Derived : public Base {
public:
    void func() {
        std::cout << "Derived::func()" << std::endl;
    }
};


int main() {
    Derived d;
    Base* p = &d;
    p->func();
    return 0;
}

 结果为Derived::function()

结论:

未引入virtual,在编译时,编译器根据指针的类型(Base*)来决定调用哪个函数,静态绑定行为

引入多态,允许动态绑定,当一个基类成员被声明为virtual时,并且在派生类中被重写,通过基类指针或引用调用该函数时,实际调用的函数是根据对象的实际类型来确定的,而不是指针或引用的类型。


http://www.kler.cn/a/508973.html

相关文章:

  • 如何在linux系统上完成定时开机和更新github端口的任务
  • 【蓝桥杯】Python算法——求逆元的两种算法
  • 从 SQL 语句到数据库操作
  • Pandas库的常用内容归纳
  • git操作(Windows中GitHub)
  • 深入云电脑PC Farm技术探讨,以阿里云、华为云、ToDesk为例
  • 用户中心项目教程(二)---umi3的使用出现的错误
  • 通过idea创建的springmvc工程需要的配置
  • vue3常用的组件的通信方式
  • 低空经济市场竞争激烈,无人机研发公司如何突破困境?
  • Hive合并小文件
  • 数据结构——队列和栈的面试题分析
  • ARM学习(42)CortexM3/M4 MPU配置
  • 如何升级node.js版本
  • o.h.engine.jdbc.spi.SqlExceptionHelper : Zero date value prohibited
  • Java 文件操作
  • 【蓝桥杯】43689.包子凑数
  • 【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度
  • Linux的几个基本指令
  • 【华为战报】2024年12月 HCIP考试战报!
  • PHP版接口调试工具(自定义GET|POST|COOKIE|HEADER|User Agent|来路Referer)
  • 【20】Word:小许-质量管理-论文❗
  • 免费送源码:Java+ssm+MySQL 图书借阅管理系统的设计与实现 计算机毕业设计原创定制
  • 云部署服务器
  • 【青海省乡镇界】面图层+shp格式arcgis数据+乡镇名称和编码+wgs84坐标无偏移下载内容测评
  • 【React】class组件extends继承原理