指向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
分享到:
相关推荐
//***求数独的解,参数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. **特征工程**:根据业务理解和数据...
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++ 面向对象 算法 数据结构]
根据提供的文件信息,本书《Algorithms, Data Structures, and Problem Solving with C++》主要讲述了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
` —— 声明了一个指向整型指针的指针(即二级指针)。 - `int p(int);` —— 声明了一个函数,接受一个整型参数,并返回整型值。 - `int (*p)(int);` —— 声明了一个指向函数的指针,该函数接受一个整型参数并...
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 ...
本项目“VB毕业设计——VB通用C++试题库系统的设计与开发”正是基于这样的背景,旨在为C++学习者提供一个高效、便捷的在线试题库系统。 这个系统的开发,首先涉及到的是数据库的设计。在数据库层面,我们需要构建一...
指针链表是一种数据结构,它在计算机科学中扮演着重要的角色,特别是在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 ...
在现代工业自动化领域,二维码(特别是DataMatrix二维码)的自动识别是至关重要的技术之一。本文将深入探讨如何使用Halcon这一强大的机器视觉软件来实现DataMatrix二维码的检测,并结合C++编程语言,构建一个完整的...
Inside the Java Virtual Machine Bill Venners $39.95 0-07-913248-0 Inside the Java Virtual Machine Acknowledgments Introduction Part One: Java's Architecture 1 Introduction to Java's Architecture Why ...