c++ 对象模型

2023-05-16

 c++ 对象模型 例子:

//Base.h文件
#pragma once
#include<string>
#include<iostream>
using namespace std;
class Base
{
public:
	Base();
	void fun();
	static void s_fun();
	static void s_fun2();
	virtual void v_fun();
	virtual ~Base();
	virtual void v_fun2();
private:
	int count =123;
	int count2 =456;
	static int s_count;
};


//Base.cpp文件
#include "Base.h"
Base::Base()
{
}
void Base::fun()
{
	cout << "fun" << endl;
}
void Base::s_fun()
{
	cout << "s_fun" << endl;
}
void Base::s_fun2()
{
	cout << "s_fun2" << endl;
}
void Base::v_fun()
{
	cout << "v_fun" << endl;
}
Base::~Base()
{
}
void Base::v_fun2()
{
	cout << "v_fun2" << endl;
}

//main.cpp
#include<iostream>
#include"Base.h"
using namespace std;
int main()
{
	Base base;
	//1,地址 对应的对象位置
	cout << "对象大小:"<<sizeof(base)  << endl;
	cout << "对象首地址:"<<(int*)(&base)<<endl;
	cout << "对象首地址的值(存放的是:虚函数表的首地址):" << (int*)*(int*)(&base) << endl;
	cout << "虚函数表:" << endl;
	cout << "虚函数表  — 第1个函数地址:" << (int*)*((int*)*(int*)(&base) + 0) << endl;	//virtual void v_fun();
	cout << "虚函数表  — 第2个函数地址:" << (int*)*((int*)*(int*)(&base) + 1) << endl;	//virtual ~Base();
	cout << "虚函数表  — 第3个函数地址:" << (int*)*((int*)*(int*)(&base) + 2) << endl;	//virtual void v_fun2();

	cout << "count成员 — 地址:" << (int*)((int*)(&base)+1) << endl;
	cout << "count2成员 — 地址:" << (int*)((int*)(&base) + 2) << endl;
	//2,地址转换成对应对象
	typedef void(*FUN)(void);
	FUN f1 = (FUN)*((int*)*(int*)(&base) + 0);
	f1();
	//(FUN)*((int*)*(int*)(&base) + 1);  因为是一个析构函数 所以不做处理
	FUN f2 = (FUN)*((int*)*(int*)(&base) + 2);
	f2();
	int* coun = (int*)((int*)(&base) + 1);
	cout << "coun:" << *coun << endl;
	int* coun2 = (int*)((int*)(&base) + 2);
	cout << "coun2:" << *coun2 << endl;
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ 对象模型 的相关文章

  • Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file

    Springboot2 3 4 RELEASE报错 xff0c 解决办法 升级jdk到11版本
  • excel 用一列数据生成图表/折线图

    问题描述 该教程适用于该列的长度很长 xff0c 数据量较大不适合鼠标拖动选中的情况 如果有更简单的方法也欢迎小伙伴们在评论区交流补充 操作步骤 1 点一下列上面的标号 即图中的B 2 按住ctrl xff0c 再点一下列的名称 即图中的a
  • ubuntu NVIDIA CC sanity check failed:

    ubuntu NVIDIA CC sanity check failed The C compiler does not appear to be able to create object files Please make sure y
  • Zeal -- 一款面向软件开发人员的离线文档浏览器

    简介 Zeal官网 就我而言 xff0c 经常忘记一些不常用的方法什么的 xff0c 难免需要查询API文档 xff0c 这时候有一个离线的文档浏览器还是很方便的 xff0c 可以集成多种语言文档 xff0c 便于查阅学习 对于 对于MAC
  • markdown-it 重定义渲染规则

    使用 markdown it 解析 markdown 代码 从这篇文章中了解到 markdown it 解析 markdown 代码的过程 xff0c 了解 token 和渲染规则 add target 61 34 blank 34 to
  • 马走日算法-回溯

    马走日算法 回溯 1 马走日走到目标节点最少的步数 include lt iostream gt include lt queue gt include lt functional gt include lt stack gt includ
  • MYSQL如何设置大小写敏感

    linux下mysql设置大小写不敏感 1 linux下mysql安装完后是默认 xff1a 区分表名的大小写 xff0c 不区分列名的大小写 xff1b 2 用root帐号登录后 xff0c 在 etc my cnf 中的 mysqld
  • Linux下几种图形化远程工具推荐

    好久没写文章了 xff0c 和大家聊聊最近在机器人调试中用到的几款远程桌面工具吧 在机器人调试过程中经常需要使用rviz之类的工具来查看机器人的运行状态 xff0c 图形化的远程工具必不可少 当然如果大家习惯用ssh或者没有图形化方面的需求
  • Win10x64-WDM设备驱动开发入门 - 第六章 VMware-Win10x64+WDK10+VS2015/2019环境搭建与双机调试

    VMware Win10x64 43 WDK10 43 VS2015 2019环境搭建与双机调试 1 驱动程序的开发语言选择调用约定运行时函数的调用 2 配置驱动开发环境1 vs2015 43 SDK 43 WDK10查看 win10 的版
  • 找出4*5矩阵中值最小和最大元素,并分别输出其值及所在的行号和列号 java

    package 矩阵 import java util Scanner public class 矩阵 public static void main String args TODO Auto generated method stub
  • 将python程序打包成exe可执行文件

    方法一 xff1a xff1a 打包完成后可以直接被他人使用 xff0c 他人不用安装python环境的 可以使用pyinstaller模块实现将python项目打包成exe执行文件 span class token triple quot
  • latex 如何在overleaf中插入算法伪代码

    问题描述 博主今天在用overleaf写论文 xff0c 急需插入伪代码 xff0c 将查阅结果记录在此以便后续参考 解决方案 overleaf有专门的说明文档来教大家如何正确插入伪代码 xff1a https www overleaf c
  • 手把手教你一整套R语言数据分析+建模流程

    手把手教你一整套R语言数据分析 43 建模流程 Intro项目背景前期准备数据描述数据清洗预分析及预处理数值型数据类别型数据 特征建模模型对比 Intro 近期在整理数据分析流程 xff0c 找到了之前写的一篇代码 xff0c 分享给大家
  • (工具技巧) —— Visual Studio Code页面放大缩小和字体的调整方式

    文章目录 Visual Studio Code页面放大缩小和字体的调整方式使用方式个人格言 Visual Studio Code页面放大缩小和字体的调整方式 使用方式 在日程的使用过程中 xff0c 有需要对Visual Studio Co
  • Centos7.8 安装 openldap+phpldapadmin 最详细步骤

    本文借助很多网上知识 做一个汇总 xff0c 并且自己手动一步步安装 很多openldap安装都是0几年的安装方式 xff0c 下面给大家演示我一步步安装的详细过程 xff0c CentOS7系统安装就不做演示了 xff0c 直接开肝 这里
  • Apache配置中文说明

    APACHE的配置 xff08 中文 xff09 基于 NCSA 服务的配置文件 这是Apache服务器主要配置文件 它包含服务器的影响服务器运行的配置指令 参见以取得关于这些指令的详细信息 不要只是简单的阅读这些指令信息而不去理解它 这里
  • ubunut 18.04安装xrdp及pulseaudio-module-xrdp

    1 桌面环境 sudo apt install xfce4 2 xrdp服务 sudo apt install xrdp 参考 xff1a xrdp 3 远程声音重定向 确认pulseaudio版本为11 1 pulseaudio vers
  • ios8 新的AlertView

    转自cocoachina OS 8的新特性之一就是让接口更有适应性 更灵活 xff0c 因此许多视图控制器的实现方式发生了巨大的变化 全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸变化
  • Debian 系统时间配置(NTP)

    系统时间NTP和RTC同步 xff0c Debian的时区配置 系统及架构 xff1a Linux Matrix 061001 5 10 42 yocto standard 1 Thu Jun 3 07 00 52 UTC 2021 arm
  • ubuntu之VScode

    文章目录 0 安装1 配置中文2 插件 xff08 推荐使用 xff09 3 conda4 matlab5 fira字体设置6 字符显示配置7 terminal自定义颜色配置8 环境变量 xff1a terminal runner问题9 复

随机推荐