C++:多态

在C++中,虚函数表(virtual function table,也称为vtable)是用来实现多态的重要机制。每个含有虚函数的类都会在内存中维护一个虚函数表,用来存储该类的虚函数地址。

当一个类包含虚函数时,编译器会在该类的对象中插入一个指向虚函数表的指针,这个指针通常是在对象的开始位置。当调用一个虚函数时,实际上是通过这个指针找到对应的虚函数表,然后在虚函数表中查找对应函数的地址并调用它。

这个机制使得在运行时可以根据对象的实际类型来调用相应的虚函数,实现了多态性。

类与对象的核心思想:继承、封装、多态

**多态:**一种状态多种表现形式。多态分为静态关联和动态关联两种。

  • 多态的动态关联:

1、this指针

表示对象多样化,在运行时才知道指向哪一个对象。

2、重写虚函数产生的动态关联

当一个类继承了另一个类并重写了基类的虚函数时,将基类指针指向派生类对象时,通过基类 的指针或引用调用该虚函数 时,调用虚函数时调用的是派生类中重写的虚函数,调用普通函数时调用的是基类中的普通函数。

例:

class Base{

public:

void show1();

virtual void show2();

};

class Child:public Base

{

public:

void show1();

virtual void show2(); //重写虚函数不加virtual也是虚函数

};

Child child;

Base *p = &child;

Base& r = child;

p->show2(); //实际调用的是Child类的show2

r.show2(); //实际调用的是Child类的show2

p->show1(); //Base中show1

r.show1(); //Base中show1

  • 多态的静态关联:

1、函数重载

一个名字表示多个函数,在编译时确定。

例:

void sum();

void sum(int x);

void sum(int x,int y);

void sum(double x);

2、函数的默认参数

同一个函数不同的传参方式。

void add(int x = 1;int y = 2);

add();

add(4);

add(6,7)

类与对象的核心思想:封装、继承、多态。

类:实体的抽象,包括数据和形式,类不占用运行内存。

对象:通过类创建的实体,对象占用运行内存。

封装:实现数据的隐藏和保护,确保数据的安全性。

继承:通过继承,子类可以重用父类的代码,减少重复编写代码的工作量。同时,继承也可以实现代码的扩展和灵活性,子类可以覆盖父类的方法或添加新的方法。

函数重载:在同一作用域中使用同一个函数名定义多个函数,只要函数参数的个数或函数参数的类型有其一不同即可。

隐藏:派生类的成员函数/变量与基类的成员函数/变量只要成员函数/变量名字相同则会隐藏基类的成员函数/变量。

访问基类中被隐藏的成员函数或成员变量:child**.Base::** x = 1234; child**.Base::**show();

重写:派生类的成员函数与基类的成员函数名字相同、参数相同、返回类型都相同或类型可兼容。

相关推荐
wifi___4 小时前
全局异常处理的原理
java·开发语言
我变成萤火虫6 小时前
河南萌新联赛2026第(四)场:南阳理工学院
数据结构·c++·算法·贪心算法·stl·动态规划
平常心的技术小牛8 小时前
Qt-快速上手-QMenuBar
开发语言·qt
青 春 记 忆8 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
余额瞒着我当琳10 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
坐吃山猪10 小时前
WebClient内存配置解析
开发语言·springboot·webflux
jdksjw11 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Zach_菠萝侠11 小时前
【DeepSeek Harness 研究】进化方向4:安全加固 思考、设计与实现
开发语言·安全·deepseek
ShineWinsu11 小时前
对于C++:布隆过滤器(bloomfilter)的详细解析
c++·面试·位图·位运算·布隆过滤器·海量数据·比特位
SL-staff11 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术