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