社区
C++ 语言
帖子详情
类成员函数和类成员变量的问题
xiangzi87
2012-10-17 01:24:23
类的成员函数和类的成员变量不是存放在一块的?
类的对象只是他的成员变量所占的空间吗?
是不是就是说如果两个类中的成员变量一样它们的对象就可以相互转换了?
如:class c1{int i,void fun1();};
class c2{int i,void fun2();};
c1 * pc1 = new c1;
c2 * pc2 = (c2 *)pc1;
pc2->fun2;//这样会不会出错;求解释原理?
如果fun1和fun2是内联函数的话是不是一样的结果?
...全文
184
12
打赏
收藏
类成员函数和类成员变量的问题
类的成员函数和类的成员变量不是存放在一块的? 类的对象只是他的成员变量所占的空间吗? 是不是就是说如果两个类中的成员变量一样它们的对象就可以相互转换了? 如:class c1{int i,void fun1();}; class c2{int i,void fun2();}; c1 * pc1 = new c1; c2 * pc2 = (c2 *)pc1; pc2->fun2;//这样会不会出错;求解释原理? 如果fun1和fun2是内联函数的话是不是一样的结果?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiangzi87
2012-10-18
打赏
举报
回复
那如果类换成结构体行不行的
例如:
struct c1{int i,void fun1();};
struct c2{int i,void fun2();};
c1 * pc1 = new c1;
c2 * pc2 = (c2 *)pc1;
pc2->fun2;//这样会不会出错;求解释原理?
有没有这种写法的????
xiangzi87
2012-10-18
打赏
举报
回复
囧了,转换的那段代码出问题了
juniorli
2012-10-17
打赏
举报
回复
1. 不在一起。成员函数在代码区,成员变量在数据区。
2. 应该还包括成员函数指针所占空间,还要考虑编译器的内存对齐,实际空间计算有些麻烦。
3. 不建议强制转换,后果未知。
max_min_
2012-10-17
打赏
举报
回复
成员一样的话, 你这样转换是问题不大,但是劝楼主三思啊!这种转换的后果是不能想象的,所以还是不要做这种事情啦!老实点吧
zhuyf87
2012-10-17
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
谢谢各位了,看见别人这样转换的所以来问一问,本来也想自己测试一下的,只是想听听大家来解释其中的原理
多谢2楼解释,似乎这样转换是可以的,就是想知道这种转换会不会有没有什么问题?
[/Quote]
至少c++标准或者编译器没有保证这种转换一定会成功吧。所以我觉得尽量不要写这种没有可靠性的代码。
sublimepan
2012-10-17
打赏
举报
回复
需要转换的话,为这两个类定制个转型操作好了,尽量不要强制转换。
yangzhe87
2012-10-17
打赏
举报
回复
相似的结构是可以强制转换的,延长空间就行啊,继承关系的类就可以强制转换啊,其实想问题不用想那么高深的,比如车,小汽车,加点变点东西就可以变(转换)了,但是你不能从车(类)变成猫(类)吧
yangzhe87
2012-10-17
打赏
举报
回复
函数当然占空间了,函数名就占地址啊,要怎么找函数?
结构体struct和类很想的 基本差不多
结构体怎么存的,类就差不多,首地址加偏移量就可以找到所有变量和函数了,很容易举出不能强制转换的列子啊,私有成员不让访问,要是能强制转换不都出问题了,内存不都泄露没了。
xiangzi87
2012-10-17
打赏
举报
回复
谢谢各位了,看见别人这样转换的所以来问一问,本来也想自己测试一下的,只是想听听大家来解释其中的原理
多谢2楼解释,似乎这样转换是可以的,就是想知道这种转换会不会有没有什么问题?
zhuyf87
2012-10-17
打赏
举报
回复
可以看一下《深入探索C++对象模型》
mujiok2003
2012-10-17
打赏
举报
回复
那么多问题。
1, 函数(包括成员函数)放在代码区,变量(包括成员变量)放在数据区,不在一起。
2, 类的实例(对象)大小就是数据成员的大小之和+编译器插入的空间(内存对齐,vptr等)。
3, 类型决定了内存布局和支持的操作。 强制类型转换会不会有问题,因情况而定,一般不建议。
建议继续学习基础知识。
翅膀又硬了
2012-10-17
打赏
举报
回复
函数不占用空间。变量才占空间。你可以强制转换。。问这么多,为什么你不自己试试去呢
C++: const修饰
类
成员变量
、
类
成员函数
、普通变量和普通函数
const修饰
类
成员变量
、
类
成员函数
、普通变量和普通函数 1. const修饰
类
成员变量
const修饰的
类
成员变量
,只能通过直接赋值(例如:a)、通过构造函数的初始化列表来赋值(例如:b)、和 const_cast来修改值(例如:c...
c++
类
的
成员变量
和
成员函数
详解
类
可以看做是一种数据
类
型,它
类
似于普通的数据
类
型,但是又有别于普通的数据
类
型,
类
这种
类
型是一个包含
成员变量
和
成员函数
的集合。
类
的
成员变量
和普通变量一样,也有数据
类
型和名称,占用固定长度的内存。但是,...
关于C++中
成员变量
在
成员函数
中使用的
问题
定义一个widget
类
,其中有9个
成员变量
和4个
成员函数
,
成员函数
需要使用这些
成员变量
; 1、当我在
类
中将
成员函数
和
成员变量
都置为public属性,在
类
的构造函数中初始化
成员变量
,在
成员函数
中直接使用
成员变量
,虽然...
C++的静态
成员变量
和静态
成员函数
与普通的
成员变量
和
成员函数
相比,静态
成员函数
和静态
成员变量
是属于
类
的,而不是属于对象的,也就是说,在
类
实例化为对象之前,静态
成员变量
和静态
成员函数
就已经分配了内存空间了,而普通
成员函数
和
成员变量
只有在...
C++
类
的
成员变量
和
成员函数
C++
类
的
成员变量
和
成员函数
类
是一种数据
类
型,它
类
似于普通的数据
类
型,但是又有别于普通的数据
类
型。
类
这种数据
类
型是一个包含
成员变量
和
成员函数
的一个集合。
类
的
成员变量
和普通变量一样,也有数据
类
型和...
C++ 语言
65,208
社区成员
250,517
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章