如何直接访问类的私有成员?

来源:互联网 发布:sql语句比较时间大小 编辑:程序博客网 时间:2024/04/27 15:22

 Adobe的一道笔试题:
  

class mystring{public:mystring(const string &str, const int count){m_str = str;m_count = count;} private:string m_str;int m_count;};

问,如何在不修改mystring类的任何代码的情况下访问 m_str和m_count;


第一种方法:

指针法:需要了解C++对象的内存模型,计算各成员变量的偏移值

mystring str("Test", 10);string *p1=reinterpret_cast<string*>(&str);cout << *p1 << endl;int *p2=reinterpret_cast<int*>((char*)&str+sizeof(string));cout << *p2 << endl;

或者:

class mystring1{public:string m_str;int m_count;};int main(){    mystring str("Test", 10);    mystring1* pstr = (mystring1*)&str;    cout << pstr->m_str << endl;    cout << pstr->m_count << endl;return 0;}

第二钟方法:

宏定义: #define private public  ,这个比较流氓


第三种方法:

友元类或者友元函数,如果添加一个友元函数的声明都算添加了的话,这个就不算了

有关友元的总结:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535305.html


0 0