类成员函数和类成员变量的问题
类的成员函数和类的成员变量不是存放在一块的?
类的对象只是他的成员变量所占的空间吗?
是不是就是说如果两个类中的成员变量一样它们的对象就可以相互转换了?
如: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和类很想的 基本差不多
结构体怎么存的,类就差不多,首地址加偏移量就可以找到所有变量和函数了,很容易举出不能强制转换的列子啊,私有成员不让访问,要是能强制转换不都出问题了,内存不都泄露没了。
[解决办法]