C++之虚函数的实现技术

cpp 复制代码
#include <iostream>
using namespace std;
class A{
public:
    int m;
};
class B{
public:
    int m;
    virtual void foo(void){
        
    }
};
int main(void){
    A a;
    B b;
    cout << "a size : " << sizeof(a) << endl;
    cout << "b size : " << sizeof(b) << endl;
    return 0;
}
  • 每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针
  • 当编译器编译以下test函数时只知道pb是B*类型的指针,并不知道它指向的具体对象类型 :pb可能指向的是B的对象,也可能指向的是D的对象。
  • 只有当程序执行过程中给test函数传递了具体参数才能确定pb指向了哪个对象,从而确定访问哪个虚表,从而实现了多态
相关推荐
寻寻觅觅☆9 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
fpcc9 小时前
并行编程实战——CUDA编程的Parallel Task类型
c++·cuda
ceclar12310 小时前
C++使用format
开发语言·c++·算法
lanhuazui1011 小时前
C++ 中什么时候用::(作用域解析运算符)
c++
charlee4411 小时前
从零实现一个生产级 RAG 语义搜索系统:C++ + ONNX + FAISS 实战
c++·faiss·onnx·rag·语义搜索
老约家的可汗11 小时前
初识C++
开发语言·c++
crescent_悦11 小时前
C++:Product of Polynomials
开发语言·c++
小坏坏的大世界12 小时前
CMakeList.txt模板与 Visual Studio IDE 操作对比表
c++·visual studio
乐观勇敢坚强的老彭12 小时前
c++寒假营day03
java·开发语言·c++
愚者游世13 小时前
brace-or-equal initializers(花括号或等号初始化器)各版本异同
开发语言·c++·程序人生·面试·visual studio