zoukankan      html  css  js  c++  java
  • 通过对象成员地址求对象本身地址

    #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;
    }

  • 相关阅读:
    信息收集之Nmap
    namp ssl秘钥安全性检测
    msf测试tomcat
    MobaXterm root用户连接虚拟机时出现Access denied
    最长公共子序列C
    web 入门58-70
    oninput,onpropertychange,onchange的用法和区别
    JavaScript判断图片是否加载完成的三种方式---转
    node.js
    SPP-Net
  • 原文地址:https://www.cnblogs.com/hqu-ye/p/4565207.html
Copyright © 2011-2022 走看看