指向data member的指针是C++的一个语言特性,对于考察class member的底层布局,尤其是虚函数指针和虚基类指针在class object中的布局很有用。如下面的例子
#include <iostream>
class Point
{
public:
Point():x(0x10),y(0x20){}
virtual void vFun(){}
static int s;
int x,y;
};
void main()
{
Point p;
Point origin;
printf("&Point::x= %X\n",&Point::x);
printf("&Point::y= %X\n",&Point::y);
printf("&p= %X\n",&p);
printf("&p.x= %X\n",&p.x);
printf("&p.y= %X\n",&p.y);
printf("sizeof(p)= %d\n",sizeof(p));
}
以上代码在VC6运行的结果如下:
&Point::x= 4
&Point::y= 8
&p= 12FF74
&p.x= 12FF78
&p.y= 12FF7C
sizeof(p)= 12
从上面的结果可以看出:
- &Point::x 和 &Point::y 指的是成员x和y在class object中的偏移量,分别是4 和8
- &p.x 和 &p.y 指的是x和y的内存地址
- 从p的大小为12可知,static data member并不是class object的部分
- 在VC6中,虚函数指针位于class object 的起始处
另外几点:
- &Point::s 的类型是 int* (static data member, 和具体的class object无关)
- &Point::a 的类型是 int Point::* (含义:指向Point data member的指针)
- &origin.a 的类型是 int* (这个操作参考的是Point 的一个特定实例)
如果关于x和y在class object中的偏移量用cout输出,总是等于1,原因我也不清楚
std::cout<<&Point::x<<std::endl; // 1
std::cout<<&Point::y<<std::endl; // 1
分享到:
相关推荐
如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么Inside TheC++ Object Model正适合你。 目录: 本立道生(侯捷 译序) 前言(Stanley B.Lippman) 第0章 导读(译者的话) 第1章 关于对象...
//***求数独的解,参数mod为0或1,time0为搜索开始时的时间,mod=0时仅检查Data1中数独是否有解,有解则抛出1,mod=1时求出所有解并输出*** { int i,j,im=-1,jm,min=10; int mark[10]; for(i=0;i;i++) { for(j...
1.1 C++模式模式(The C++ Object Model) 简单对象模型(A Simple Object Model) 表格驱动对象模型(A Table-driven Object Model) C++对象模型(Th e C++ Object Model) 对象模型如何影响程序(How the Object ...
这本书《ROS 2机器人编程实战——基于现代C++和Python 3》旨在教授如何利用ROS 2的强大功能来构建高效、可靠的机器人应用程序。通过配套的代码,读者可以深入理解ROS 2的核心概念,并在实践中提升技能。 1. **ROS 2...
The fourth edition of Data Structures and Algorithm Analysis in C++ describes data structures, methods of organizing large amounts of data, and algorithm analysis, the estimation of the running time ...
在C++编程中,函数指针是一个非常强大的工具,它允许我们将函数作为其他函数的参数或者存储在变量中。在本示例中,“函数指针万能打印”着重讲解如何利用函数指针实现一个通用的打印系统,可以适应各种数据类型的...
"指针链表——数据的插入与删除" 在计算机科学中,链表是一种基本的数据结构,它以节点的形式存储数据,每个节点都包含一个指向下一个节点的指针。指针链表是一种特殊的链表,它使用指针来连接各个节点,实现数据的...
2. **探索性数据分析(EDA)**:借助Matplotlib和Seaborn库进行可视化,通过直方图、散点图、箱线图等了解数据分布、相关性和异常情况,这有助于理解数据特性和发现潜在问题。 3. **特征工程**:根据业务理解和数据...
在.NET框架中,C#是一种常用的编程语言,而C++DLL是基于C++编译的动态链接库,常用于提供底层系统级的功能。有时我们需要在C#应用中调用C++DLL来利用这些功能。本篇文章将深入探讨如何在C#中调用一个C++DLL,特别是...
Data Structures, Algorithms and Applications in C++ Second Edition Sartraj Sahni | Universities Press 2005 | ISBN: 817371522X | PDF | 826 Pages | 27 MB Description The study of data structures and ...
Data Structures Algorithms Object-Oriented Design C++ 面向对象 算法 数据结构]
Navisworks2012 DataTools 功能——将模型与外部数据库链接
Data Structures and Algorithms with Object-Oriented Design Patterns in C++.rar Data Structures and Algorithms with Object-Oriented Design Patterns in C++.rar
Data Structures and Other Objects Using C++ takes a gentle approach to the data structures course in C++. Providing an early, self-contained review of object-oriented programming and C++, this text ...
指针链表是一种数据结构,它在计算机科学中扮演着重要的角色,特别是在C++这样的编程语言中。在C++中,链表不是内置的数据结构,但可以通过指针来实现。本篇文章将深入探讨如何使用C++来实现一个指针链表。 首先,...
RComponent.DataObject is an object persistence layer for .NET Framework. A high-performance persistence middleware with multi-database capability. It provides a simple and flexible way to map ...