类的内存模型,求助
- C/C++ code
#include "stdafx.h"#include <iostream>using namespace std;class Base{public: void foo1(void){} void foo2(void){}private: double m_fMember1; int m_nMember2;};typedef void (Base::*CLASS_FUNC)(void);int _tmain(int argc, _TCHAR* argv[]){ Base base; cout<<&base<<endl; cout<<&(base.m_fMember1)<<endl; cout<<sizeof(double)<<endl; cout<<&(base.m_nMember2)<<endl; CLASS_FUNC pFunc=&Base::foo1(); unsigned *tmp=(unsigned*)&pFunc; cout<<hex<<*tmp<<endl; pFunc=&Base::foo2(); tmp=(unsigned*)&pFunc; cout<<hex<<*tmp<<endl; return 0;}//base.m_fMember1
//base.m_nMember2
//Base::foo1()
//Base::foo2()
这些为什么是不可访问的,不是实例化了base类了吗?
[解决办法]
1,2 语法限制.
3,4 只有静态成员函数才能这样访问
[解决办法]
1,2 语法限制.
3,4 只有静态成员函数才能这样访问
[解决办法]
1.2,在VS里面貌似有这种语法扩展
[解决办法]
//base.m_fMember1
//base.m_nMember2
不能访问是因为private
只有类的内部能访问,类的外部无法访问的
//Base::foo1()
//Base::foo2()
应该写成base.foo1()
非静态函数一般要用一个对象来调用
静态函数可以用Base::foo1()
[解决办法]
同m1c2f4843,完全正确,或许是你粗心 或许是C++语法不扎实