首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-20 23:13
武汉工程大学 销售工程师
我是秋招的小丑
周末晚上,我突然收到通知,明天就要参加群面。感觉自己就像被用来刷KPI的,心里一阵烦躁,真的好累。人生似乎已经没有希望,眼前的挑战让我感到无尽的疲惫。我甚至连业务面都没机会参与。今天又面了小米的零售,14个人的群面,我根本抢不到麦,纯纯的小丑。
牛客创作赏金赛
点赞
评论
收藏
分享
11-22 11:14
华南师范大学 Web前端
11.21卓望数码一面
大约50mins,一个看起来好像接近40的面试官,早上面完,下午hr就说通过了约二面。自我介绍对vue更熟还是react更熟。说一下你有什么vue项目经历。你在做vue项目的过程中有做到什么性能优化吗。问我刚刚提到的利用到了浏览器的请求并发处理来解决性能优化问题,具体措施是什么(简单扯了一下通过升级http协议实现,,)在项目中还实现了哪些性能优化。问为什么带 hash 值的文件就设置为协商缓存,而不带 hash 值的文件就设置为强制缓存(这个当时忘了,说反了,应该是带 hash 值文件设置为强制缓存,不带 hash 值的文件设置协商缓存)。说一下强制缓存和协商缓存的区别,它们的具体实现分别是...
查看26道真题和解析
点赞
评论
收藏
分享
10-11 16:54
河北工程技术学院 测试工程师
这样的简历,HR会看?
offer多多的六边形战士很无语:
看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞
评论
收藏
分享
11-11 19:35
门头沟学院 安全工程师
对方撤回了一个笔试
世界是个巨大的草台班子
shtdbb_:
还不错,没有让你做了笔试再挂你
点赞
评论
收藏
分享
11-19 10:10
南京大学 银行管培生
交通银行总行入职初体验
在大家都在卷,尤其是银行这块。说实话,刚开始的工作真的很琐碎。很多新同事的日常就是收发邮件,和忙但其实也不知道自己在忙啥。我运气不错,被安排做一些项目,成果还被采纳了。不过,流程真的是个大坑。为了合规,很多事情都得经过层层审批。领导、部门之间的来回真的浪费了好多时间。
交通银行工作强度 39人发布
点赞
评论
收藏
分享
点赞成功,聊一聊 >
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
爱信等
8717
2
...
秋招圆满结束
6434
3
...
总结一下鼠鼠找实习的历程
6188
4
...
11.25校招&实习招聘信息汇总
4995
5
...
阿里云VS腾讯VS华为,决赛圈
4701
6
...
真心觉得25届的求职之路太艰难了
4662
7
...
offer比较的一些建议:互联网、银行、金融科技、国企、央企
4662
8
...
阿里云管培生开奖了
4382
9
...
华为开奖
3282
10
...
重生之我变成了小学生
2854
正在热议
#
25届秋招总结
#
303610次浏览
2693人参与
#
如果不工作真的会快乐吗
#
59495次浏览
519人参与
#
百度开奖
#
164054次浏览
982人参与
#
地方国企笔面经互助
#
3899次浏览
11人参与
#
美团求职进展汇总
#
1328394次浏览
12453人参与
#
选完offer后,你后悔学本专业吗
#
20202次浏览
144人参与
#
阿里云管培生offer
#
17902次浏览
297人参与
#
正在实习的你,几点下班
#
52151次浏览
391人参与
#
国央企薪资爆料
#
8708次浏览
69人参与
#
如何一边实习一边秋招
#
992702次浏览
12640人参与
#
提前批简历挂麻了怎么办
#
146606次浏览
1948人参与
#
学历or实习经历,哪个更重要
#
51331次浏览
402人参与
#
海康威视求职进展汇总
#
399137次浏览
3406人参与
#
米哈游求职进展汇总
#
176193次浏览
1458人参与
#
求职遇到的搞笑事件
#
70917次浏览
577人参与
#
投递实习岗位前的准备
#
1179904次浏览
18398人参与
#
面试体验感最好的是哪家?
#
85185次浏览
846人参与
#
实习生应该准时下班吗
#
167509次浏览
1159人参与
#
得物求职进展汇总
#
66416次浏览
682人参与
#
网申一定要掌握的小技巧
#
5358次浏览
53人参与
#
招聘要求与实际实习内容不符怎么办
#
10322次浏览
273人参与
#
0offer是寒冬太冷还是我太菜
#
899150次浏览
8015人参与
牛客网
牛客企业服务