首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

类成员函数和类成员变量的有关问题

2012-11-10 
类成员函数和类成员变量的问题类的成员函数和类的成员变量不是存放在一块的?类的对象只是他的成员变量所占

类成员函数和类成员变量的问题
类的成员函数和类的成员变量不是存放在一块的?
类的对象只是他的成员变量所占的空间吗?
是不是就是说如果两个类中的成员变量一样它们的对象就可以相互转换了?
如:class c1{int i,void fun1();};
  class c2{int i,void fun2();};
  c1 * pc1 = new c1;
  c2 * pc2 = (c2 *)pc1;
  pc2->fun2;//这样会不会出错;求解释原理?
如果fun1和fun2是内联函数的话是不是一样的结果?

[解决办法]
那么多问题。
1, 函数(包括成员函数)放在代码区,变量(包括成员变量)放在数据区,不在一起。
2, 类的实例(对象)大小就是数据成员的大小之和+编译器插入的空间(内存对齐,vptr等)。
3, 类型决定了内存布局和支持的操作。 强制类型转换会不会有问题,因情况而定,一般不建议。

建议继续学习基础知识。
[解决办法]
函数当然占空间了,函数名就占地址啊,要怎么找函数?
结构体struct和类很想的 基本差不多
结构体怎么存的,类就差不多,首地址加偏移量就可以找到所有变量和函数了,很容易举出不能强制转换的列子啊,私有成员不让访问,要是能强制转换不都出问题了,内存不都泄露没了。
[解决办法]

探讨

谢谢各位了,看见别人这样转换的所以来问一问,本来也想自己测试一下的,只是想听听大家来解释其中的原理
多谢2楼解释,似乎这样转换是可以的,就是想知道这种转换会不会有没有什么问题?

[解决办法]
1. 不在一起。成员函数在代码区,成员变量在数据区。
2. 应该还包括成员函数指针所占空间,还要考虑编译器的内存对齐,实际空间计算有些麻烦。
3. 不建议强制转换,后果未知。

热点排行