关于C++多态 的基本知识 与 底层原理

简介: 关于C++多态 的基本知识 与 底层原理

基本知识

上述代码阐述的是一种 动态多态,其中的Animal &animal 是运用了 父类的引用或者指针 可以直接指向 子类对象。

若不加 virtual ,则地址会进行早绑定,无论父类的指针指向什么,进行的都是animal.speak()。

若加了virtual,则起到了晚绑定的作用,若dospeak(cat),则进行的是cat.speak()的操作。

底层原理

在类Animal的内部,存在 vfptr 指针,指向一个 vftable-虚函数(表),虚函数(表)中记录的是这个虚函数的地址

注 : v-virtual, f-function,ptr-pointer

若如上述代码用 Cat 子类来继承 父类 Animal,子在子类中 也有一个vfptr指向 vftable-虚函数(表),子类的虚函数(表)中记录的是子类的虚函数的地址。

若在子类中 重写了 父类的虚函数(表)中 的 父类的虚函数的地址 会被替换成 子类中 虚函数 的地址,这就达到了 多态 的 效果

 

 

 

相关文章
|
2月前
|
C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(二)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
编译器 C++ 开发者
【C++】深入解析C/C++内存管理:new与delete的使用及原理(三)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
2月前
|
存储 C语言 C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(一)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
|
1月前
|
存储 编译器 数据安全/隐私保护
【C++】多态
多态是面向对象编程中的重要特性,允许通过基类引用调用派生类的具体方法,实现代码的灵活性和扩展性。其核心机制包括虚函数、动态绑定及继承。通过声明虚函数并让派生类重写这些函数,可以在运行时决定具体调用哪个版本的方法。此外,多态还涉及虚函数表(vtable)的使用,其中存储了虚函数的指针,确保调用正确的实现。为了防止资源泄露,基类的析构函数应声明为虚函数。多态的底层实现涉及对象内部的虚函数表指针,指向特定于类的虚函数表,支持动态方法解析。
33 1
|
2月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
47 2
C++入门12——详解多态1
|
2月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
89 1
|
2月前
|
C++
C++番外篇——虚拟继承解决数据冗余和二义性的原理
C++番外篇——虚拟继承解决数据冗余和二义性的原理
49 1
|
4月前
|
存储 编译器 C++
|
5月前
|
机器学习/深度学习 算法 C++
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
C++多态崩溃问题之在PyTorch中,如何定义一个简单的线性回归模型
C++多态崩溃问题之在PyTorch中,如何定义一个简单的线性回归模型