通过对象成员地址求对象本身地址

#include "stdafx.h"
#include <iostream>
using namespace std;

class Polygon
{
public:
Polygon() {Draw();}
void Draw() {}//cout<<"Polygon::Draw()"<<endl;
void Erase() {}//cout<<"Polygon Erase()"<<endl;
~Polygon() {Erase();}
};
class Shape
{
public:
void Draw() {}//cout<<"Base::Draw()"<<endl;
void Erase() {}//cout<<"Base::Erase()"<<endl;
Shape() {Draw();} //基类构造函数,调用上面的Draw函数体
~Shape() {Erase();}//基类析构函数,调用上面的Erase函数体
public:
int a;
char b[20];
Polygon* objPolygon;
};

#define POINTER uintptr_t
#define castObject(pMenber, _group, menber) ((_group*)((unsigned int)pMenber - (unsigned int)(&((_group*)pMenber)->menber) + (unsigned int)pMenber))
#define castOBJECT(pMember, group, member) (group*)((POINTER)pMember - (POINTER)(&((group*)pMember)->member) + (POINTER)pMember)
int _tmain(int argc, _TCHAR* argv[])
{
Shape obj;
cout<<"sharp address ==="<<(unsigned int)&obj<<endl;

Polygon** pPolygon = &(obj.objPolygon);
//cout<<"sharp menber objPolygon address =="<<pPolygon<<endl;

cout<<"sharp address ==="<<(unsigned int)castObject(pPolygon, Shape, objPolygon)<<endl;
cout<<"sharp address ==="<<(unsigned int)castOBJECT(pPolygon, Shape, objPolygon)<<endl;

return 0;
}

时间: 2024-08-12 00:13:31

通过对象成员地址求对象本身地址的相关文章

C++之对象成员指针

对象成员指针:对象的指针作为另外一个类的成员 对象成员指针既可以用初始化列表进行初始化,也可以使用普通构造函数进行初始化 对象成员指针常见的初始化方式和销毁方式 原文地址:https://www.cnblogs.com/xjyxp/p/11238760.html

类和对象的使用之对象指针

1.对象指针的一般概念 对象指针:指向类的成员的指针.在C++中,可以说明指向类的数据成员和成员函数的指针. 对象指针遵循一般变量指针的各种规则:类名 *对象指针名: 对象指针名à成员名: 对象指针在使用之前,也一定要先进行初始化,让它指向一个已经声明过的对象,然后再使用.通过对象指针,可以访问到所指向对象的公有成员. 2.指向对像的指针在建立对像时,编译系统会为每一个对像分配一定的存储空间,以存放其成员,对像空间的起始地址就是对像的指针.可以定义一个指针变量,用来存和对像的指针.如果有一个类:

通过HttpservletRequest对象获取客户端的真实IP地址

这篇文章主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache.Squid.nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客户端的真实IP地址了. 如果使用了反向代理软件,将http://192.168.1.110:2046/ 的UR

【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法

. 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定义 (1) 接口部分定义格式 接口部分定义格式 : @interface className : superClassName { type _variableName; ... ... } - (type) methodName : type parameterName; @end -- 接口定义

C++成员不通过对象调用的直接调用写法

C++成员不通过对象调用(.或->方式)的另类(C式)调用写法 #include <iostream> using namespace std; /* 我们知道,成员函数和普通函数最大的区别就是成员函数包含一个隐藏的参数this指针,用来表明成员函 数当前作用在那一个对象实例上. 根据调用约定(Calling Convention)的不同,成员函数实现this指针的方式也不同. 1. 如果使用__thiscall调用约定,那么this指针保存在寄存器ECX中,VC编译器缺省情况下就是这样

Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 注意点: self ,我们讲过了,self = 对象,实例化后的对象调用类的各种成员的时候的self就是这个对象. 而且我们也讲过了

类成员和对象成员

3.7   类数据成员和类成员函数 到目前为止,我们所看到的数据成员和成员函数都是属于对象的.比方说,我们在3.6节定义了Task类,如果我们用Task类定义如下两个对象: 那么,这两个对象都拥有各自的id.st.ft和logFile数据成员.C++还支持另外一种类型的成员,这种成员属于类本身,而不属于类的对象,我们称之为类成员(class member),而将属于对象的成员称为对象成员(object member)或实例成员(instance member).使用关键字static就可以创建一

c++对象成员的引用---12

原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 在程序中经常需要访问对象中的成员.访问对象中的成员可以有3种方法: 通过对象名和成员运算符访问对象中的成员: 通过指向对象的指针访问对象中的成员: 通过对象的引用变量访问对象中的成员. 通过对象名和成员运算符访问对象中的成员 例如在程序中可以写出以下语句: stud1.num=1001; //假设num已定义为公用的整型数据成员 表示将整数1001赋给对象stud1中的数据成员num.其中“.”是成员

对象成员

--------------siwuxie095 对象成员 在对象中包含其它对象是一种非常普遍的现象 以坐标系中的线段为例:说明对象成员的定义和使用方法 如果要定义一个如上图所示的线段类,每条线段都由两个点连接而形成, 这意味着,需要定义一个表示点的类,该点类包含横坐标和纵坐标,而 线段类包含两个坐标对象 可见,要描述清楚这个数学问题,至少要定义两个类:一个定义坐标的 点,另一个定义点上的线段 坐标类:Coordinate 线段类:Line 定义完成后,通过实例化来描述一条线段: 当实例化 Li