016 虚函数
/* 目录: 一 概念 二 简单对比
三 简单对比 - 图形 */
一 概念
/* // 虚函数 虚函数一定是重写函数,在基类重写函数前加virtual 使用: 1 类对象: 使用什么对象调用对应类的重写函数 2 基类指针: (1) 调用普通函数: 对应类函数 (2) 调用virtual函数: 指针指向的类 原理: 1 对象首部多个指针,指针指向虚表 思想: 抽象与实现 基类: 概念、抽象 派生类: 具体对象 静态绑定和动态绑定 静态: 编译时绑定,通过对象调用(对象类型) 动态: 运行时绑定,通过地址调用(根据虚表) // 纯虚函数: 1 不能定义基类对象 2 派生类必须有重写函数 3 含纯虚函数的基类,叫做抽象类。纯虚函数也称为抽象函数。 */
二 简单对比
#pragma once #include <iostream> using namespace std; class CBase { public: void RealFunc() { cout << "CBase::RealFunc()" << endl; m_i = 0x10; } virtual void VirtualFunc() { cout << "CBase::VirtualFunc()" << endl; m_i = 0x11; } int m_i; }; class CDerived :public CBase { public: void RealFunc() { cout << "CDerived::RealFunc()" << endl; m_j = 0x20; } void VirtualFunc() { cout << "CDerived::VirtualFunc()" << endl; m_j = 0x22; } private: int m_j = 0x88; }; int main() { CBase b; b.RealFunc(); b.VirtualFunc(); cout << sizeof(b) << endl; CDerived d; d.RealFunc(); d.VirtualFunc(); cout << sizeof(d) << endl; CBase *pb; pb = &b; pb->RealFunc(); pb->VirtualFunc(); pb = &d; pb->RealFunc(); pb->VirtualFunc(); return 0; }
三 简单对比 - 图形
压缩包: 链接
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步