首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
MatthewMatt
2017-06-21 23:06
家里蹲大学 C++
关注
已关注
取消关注
请教下一个小问题,C++派生类都会包含基类对象成员吗?
详细补充下:无论派生类是已何种方式继承基类,包括public protected private,基类对象成员也可以是public protected private,我想问无论派生类以哪种方式继承基类,是不是在内存中派生类都会含有基类对象成员,哪怕派生类无法访问?
今天突然想到的一个小问题,求大神告知。
提示
全部评论
推荐
最新
楼层
Joran_02
浙江万里学院 C++
在C++编译器的内部 类可以理解为结构体 子类是由父类成员叠加子类新成员得到的 C++多态实现原理:
点赞
回复
分享
发布于 2017-06-22 07:49
harry502
重庆邮电大学 C++
是的...
点赞
回复
分享
发布于 2017-06-21 23:35
艾德
福建工程学院 C++
应该吧,举个例子。父类指针指向子类对象,父类指针可以访问private继承的子类对象中属于父类部分的成员,所以内存应该存在
点赞
回复
分享
发布于 2017-06-22 00:26
JEWELCCLi
腾讯_测试开发
存在,最直接的例子就是多态机制中的虚函数表,可以百度下陈皓大神的那个blog,那个经典啊,有图有理,直观明了
点赞
回复
分享
发布于 2017-06-22 07:10
Joran_02
浙江万里学院 C++
会包含。我给你一个C实现c++多态和继承的例子
点赞
回复
分享
发布于 2017-06-22 07:37
Joran_02
浙江万里学院 C++
test.h #ifndef _TEST_H_ #define _TEST_H_ typedef void Demo; typedef void Derived; Demo* Demo_Create(int i, int j); int Demo_GetI(Demo* pThis); int Demo_GetJ(Demo* pThis); int Demo_Add(Demo* pThis, int value); void Demo_Free(Demo* pThis); Derived* Derived_Create(int i, int j, int k); int Derived_GetK(Derived* pThis); int Derived_Add(Derived* pThis, int value); #endif test.c #include "test.h" #include "malloc.h" static int Demo_Virtual_Add(Demo* pThis, int value); static int Derived_Virtual_Add(Demo* pThis, int value); struct VTable // 2. 定义虚函数表数据结构 { int (*pAdd)(void*, int); // 3. 虚函数表里面存储什么??? }; struct ClassDemo { struct VTable* vptr; // 1. 定义虚函数表指针 ==》 虚函数表指针类型??? int mi; int mj; }; struct ClassDerived { struct ClassDemo d; int mk; }; static struct VTable g_Demo_vtbl = { Demo_Virtual_Add }; static struct VTable g_Derived_vtbl = { Derived_Virtual_Add }; Demo* Demo_Create(int i, int j) { struct ClassDemo* ret = (struct ClassDemo*)malloc(sizeof(struct ClassDemo)); if( ret != NULL ) { ret->vptr = &g_Demo_vtbl; // 4. 关联对象和虚函数表 ret->mi = i; ret->mj = j; } return ret; } int Demo_GetI(Demo* pThis) { struct ClassDemo* obj = (struct ClassDemo*)pThis; return obj->mi; } int Demo_GetJ(Demo* pThis) { struct ClassDemo* obj = (struct ClassDemo*)pThis; return obj->mj; } // 6. 定义虚函数表中指针所指向的具体函数 static int Demo_Virtual_Add(Demo* pThis, int value) { struct ClassDemo* obj = (struct ClassDemo*)pThis; return obj->mi + obj->mj + value; } // 5. 分析具体的虚函数!!!! int Demo_Add(Demo* pThis, int value) { struct ClassDemo* obj = (struct ClassDemo*)pThis; return obj->vptr->pAdd(pThis, value); } void Demo_Free(Demo* pThis) { free(pThis); } Derived* Derived_Create(int i, int j, int k) { struct ClassDerived* ret = (struct ClassDerived*)malloc(sizeof(struct ClassDerived)); if( ret != NULL ) { ret->d.vptr = &g_Derived_vtbl; ret->d.mi = i; ret->d.mj = j; ret->mk = k; } return ret; } int Derived_GetK(Derived* pThis) { struct ClassDerived* obj = (struct ClassDerived*)pThis; return obj->mk; } static int Derived_Virtual_Add(Demo* pThis, int value) { struct ClassDerived* obj = (struct ClassDerived*)pThis; return obj->mk + value; } int Derived_Add(Derived* pThis, int value) { struct ClassDerived* obj = (struct ClassDerived*)pThis; return obj->d.vptr->pAdd(pThis, value); } Main.c #include "stdio.h" #include "test.h" void run(Demo* p, int v) { int r = Demo_Add(p, v); printf("r = %d\n", r); } int main() { Demo* pb = Demo_Create(1, 2); Derived* pd = Derived_Create(1, 22, 333); printf("pb->add(3) = %d\n", Demo_Add(pb, 3)); printf("pd->add(3) = %d\n", Derived_Add(pd, 3)); run(pb, 3); run(pd, 3); Demo_Free(pb); Demo_Free(pd); return 0; }
点赞
回复
分享
发布于 2017-06-22 07:42
MatthewMatt
楼主
家里蹲大学 C++
感谢各位大佬的回复。我在C++ primer 5th p534里有看到这么一句话“一个基类的对象可能是派生类对象的一部分,也可能不是”,请问下这句话是什么意思呢?我没有搞太懂,是不是和前面所表述的意思不一样?
点赞
回复
分享
发布于 2017-06-22 09:49
Joran_02
浙江万里学院 C++
写的太概念性了吧,愿意应该是,基类的对象可以独立存在,独立存在的话,那就不是派生类对象的一部分了---这就是那个可能不是。
点赞
回复
分享
发布于 2017-06-24 19:46
Joran_02
浙江万里学院 C++
我去翻了下,根据上下文理解。就是这个意思
点赞
回复
分享
发布于 2017-06-24 19:52
Joran_02
浙江万里学院 C++
然后书上举了两个 指针转换的例子。你动手写一写
点赞
回复
分享
发布于 2017-06-24 19:54
还没有回复哦~
相关推荐
11-19 17:10
武汉大学 前端开发其它
每天上班郁闷,后悔拒绝掉的以前offer
每天上班郁闷,后悔拒绝掉的以前offer,超级后悔进去这家公司,每天都不开心,之前的那家看到还有招,但是人事没回复,怎么办,哎。选错公司了
如果再来一次,你还会选择这个工作吗?
点赞
评论
收藏
分享
11-19 10:26
牛客运营
今年的校招薪资,有点猛啊。。。
25届秋招企业陆续开奖,今年的薪资和往年不太相同;今年可以说是“下猛药”、“沙峰了”(哈哈 牛牛这牛生没见过这么多钱🥺)前有拿了50+白菜价的我牛可乐的朋友后有连拿3个sp的我失散多年的兄弟更有总包90+,还在纠结其他offer的哥们我以为这只是个例,没想到这居然是常态。。。在【2024最新名企校招薪资爆料】的资料包里,就看到不少新出的逆天校招薪资。这个资料不收费,点击下方链接或扫码,邀请2位同学组团,即可一起免费领取!🔴 你将获得:✅ 大厂内部真人爆料,真实薪资更靠谱✅ 不同岗位薪资汇总,了解薪资更全面✅ 牛客独家整理出品,过了这村没这店拿offer,别犹豫,点击马上领取>>...
想润的芹菜人狠话不多:
转人工
点赞
评论
收藏
分享
11-24 15:09
已编辑
北京戏曲艺术职业学院 硬件开发
华为报批
和对接人沟通确认意向,地点等信息,属于第一批。已经报批,结果会在12.5号前公布,最晚推迟两个周。武汉终端硬件电源,bg985本。苦等两个月,一定要给我发offer
沉淀一会:
1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞
评论
收藏
分享
11-23 11:10
北京航空航天大学 前端工程师
网易实习四个月体验
上班时间是10点到18点半,中午有两个小时的午休,算下来每天工作也就六个半小时。我所在的组任务量刚刚好,四个月里从来没有加过班。不过听说有些组的同事就没那么幸运,吃饭的时候有哥们说他连续三周都在加班。同事们都特别友好,几乎每周都有免费的下午茶,大家一起聊天,气氛超好。还有,网易严选的员工购物打三折,花了90多块买了300多的东西,很划算
网易公司福利 153人发布
点赞
评论
收藏
分享
点赞成功,聊一聊 >
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
爱信等
8356
2
...
秋招圆满结束
6484
3
...
总结一下鼠鼠找实习的历程
6332
4
...
11.25校招&实习招聘信息汇总
4994
5
...
阿里云VS腾讯VS华为,决赛圈
4740
6
...
offer比较的一些建议:互联网、银行、金融科技、国企、央企
4661
7
...
真心觉得25届的求职之路太艰难了
4511
8
...
阿里云管培生开奖了
4381
9
...
华为开奖
3242
10
...
重生之我变成了小学生
2854
正在热议
#
25届秋招总结
#
304074次浏览
2697人参与
#
如果不工作真的会快乐吗
#
59533次浏览
520人参与
#
百度开奖
#
164258次浏览
983人参与
#
地方国企笔面经互助
#
3911次浏览
11人参与
#
美团求职进展汇总
#
1328582次浏览
12454人参与
#
选完offer后,你后悔学本专业吗
#
20231次浏览
144人参与
#
阿里云管培生offer
#
18029次浏览
298人参与
#
正在实习的你,几点下班
#
52183次浏览
392人参与
#
国央企薪资爆料
#
8762次浏览
69人参与
#
如何一边实习一边秋招
#
992753次浏览
12640人参与
#
提前批简历挂麻了怎么办
#
146619次浏览
1948人参与
#
学历or实习经历,哪个更重要
#
51377次浏览
403人参与
#
海康威视求职进展汇总
#
399166次浏览
3406人参与
#
米哈游求职进展汇总
#
176220次浏览
1460人参与
#
求职遇到的搞笑事件
#
70942次浏览
577人参与
#
投递实习岗位前的准备
#
1179958次浏览
18398人参与
#
面试体验感最好的是哪家?
#
85197次浏览
846人参与
#
实习生应该准时下班吗
#
167516次浏览
1159人参与
#
得物求职进展汇总
#
66429次浏览
682人参与
#
网申一定要掌握的小技巧
#
5363次浏览
54人参与
#
招聘要求与实际实习内容不符怎么办
#
10328次浏览
273人参与
#
0offer是寒冬太冷还是我太菜
#
899337次浏览
8015人参与
牛客网
牛客企业服务