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

虚基类和虚继承

抽象类(有纯虚函数的类) / 虚基类
virtual:
1.修饰成员方法是虚函数
2.可以修饰继承方式,是虚继承。被虚继承的类,称作虚基类。

vfptr/vbptr
vftable/vbtable

在这里插入图片描述

在Windows vs下会存在内存释放错误的问题,Linux g++下自动修正。

在这里插入图片描述
命令:cl 继承与多态.cpp /d1reportSingleClassLayout 可以查看内存布局。

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;

class A {
public:
	virtual void func() { cout << "call A::func" << endl; }
	void operator delete(void *ptr) {
		cout << "operator delete p:" << ptr << endl; 
		free(ptr);
	}
		
private:
	int ma;
};

class B : virtual public A {
public:
	void func() { cout << "call B::func" << endl; }
	void *operator new(size_t size) {
		void *p = malloc(size); 
		cout << "operator new p:" << p << endl;
		return p;
	}
		
private:
	int mb;
};

/*
A a; 4个字节
B b; ma,mb   8个字节+4 = 12个字节  vbptr
*/
int main() {
	基类指针指向派生类对象,永远指向的是派生类基类部分数据的起始地址
	//A *p = new B(); // B::vftable
	//p->func();
	//delete p;

	B b;
	A *p = &b;
	p->func();

	return 0;
}


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

相关文章:

  • Qt实现简易音乐播放器
  • vite共享配置之---css相关
  • “卫星-无人机-地面”遥感数据快速使用及地物含量计算的实现方法
  • langchain教程-3.OutputParser/输出解析
  • 基础篇05-直方图操作
  • GB/T 44721-2024 与 L3 自动驾驶:自动驾驶新时代的基石与指引
  • 安卓7以上抓包证书安装
  • 2021 年 12 月青少年软编等考 C 语言五级真题解析
  • 《Kettle实操案例一(全量/增量更新与邮件发送)》
  • 深度学习-105-RAG技术之嵌入模型安装部署应用的三种方式
  • 初窥强大,AI识别技术实现图像转文字(OCR技术)
  • Mac下使用Docker安装CREMEB-PRO宝塔环境
  • 【Leetcode 每日一题】59. 螺旋矩阵 II
  • 广度优先搜索(BFS)算法详解——以走迷宫问题为例
  • 【JS】element-ui table展示勾选状态
  • AI工具——Cherry Studio,搭建满血DeepSeek R1的AI对话客户端
  • 【医院绩效管理专题】2.绩效管理:医院发展的核心驱动力
  • Jmeter接口自动化测试
  • ZIP完美解密解压缩和暴力破解最佳实现
  • python图片转字符画应用
  • Java 集合中的 `removeIf` 和 Stream API 的 `filter`
  • 4.Python字符串和列表:字符串输入、字符串输出、下标和切片、字符串常见函数、列表(list)、列表的循环遍历、列表的增删改查、列表的嵌套、列表的切片
  • 基于单片机的电子抢答器设计(论文+源码+实物)
  • Vue 3 30天精进之旅:Day 17 - 样式和动画
  • UE学习日志#24 C++笔记#10 内存管理1
  • linux——网络计算机{序列化及反序列化(JSON)(ifdef的用法)}