首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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 14:53
腾讯云智研发_视觉算法工程师(准入职员工)
腾讯云智内推腾讯云智面经
面了差不多27分钟自我介绍面试一开始,面试官打开了摄像头,但由于网络问题,我提到面试官说话有点卡,随后他就关闭了摄像头。谈谈你对C++、Go语言和Java语言的理解面试官让我谈谈对这三种编程语言的理解,我主要讲了指针、内存回收等方面的内容。谈谈你对HTTPS的理解这个问题主要考察我对网络安全协议的了解。进程与线程的区别面试官让我解释进程和线程的区别。你实习项目说一下我详细介绍了自己在实习期间参与的项目。你的博客项目是你自己做的一个博客项目吗?我如实回答,项目是跟着网上教程做的,但我自己扩展了一些功能,比如实现了线程池。Java垃圾回收机制面试官让我解释Java的垃圾回收机制。反问环节面试官表示...
点赞
评论
收藏
分享
昨天 19:21
上海交通大学 产品经理
Offer篇 主管人nice,但我劝她据offer
学妹找我聊,她实习的大厂J终于给她转正offer,非常开心哈:部门氛围好,同事关系好,关键是主管人nice,加班有但是还能接受,真想留下来踏踏实实干几年。幸福的烦恼在于,在没有得到转正offer时候,学妹也投了其他大厂的岗位,结果最近另外一个大厂H也发了offer,薪水不错,岗位不错,现在她有些纠结了。聊完后,我劝她据了J的offer,原因听我细说哈。1,关于发展人的发展离不开时代的烙印:在对的时间选择有潜力的赛道(行业)和赛车(公司),最好能在核心部门核心岗位,努力拼搏,锻炼能力,积累经验,跟着团队,公司和行业一起成长,未来的路会越走越宽。她不喜欢大城市的生活方式,未来还是想回到出生的城市有...
毕业求职不EMO
牛客创作赏金赛
点赞
评论
收藏
分享
10-15 23:16
河海大学成人教育学院 C++
同为笔试。。有底气了,不做了
hso_:
哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞
评论
收藏
分享
11-21 15:10
华南农业大学 运营
领导让我以后别叫他哥
领导让我以后别叫他哥 此时一个从小被教育一生都要大大方方懂礼貌的东北人悄悄的碎了… 我以后该怎么叫他啊…
牛客602221609号:
工作的时候称职务
点赞
评论
收藏
分享
点赞成功,聊一聊 >
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
26日常实习小红书面经
1.5W
2
...
给正在秋招中枯燥的大家找个乐子听听吧,不被理解真的心寒
1.4W
3
...
sagima的阎良出差日记
1.2W
4
...
双非本科四年的总结
1.1W
5
...
秋招颗粒无收,我要何去何从
9224
6
...
秋招是时候收官了
8702
7
...
双非学院本,转正云智!
8298
8
...
请大家警惕“总包”骗局!
7420
9
...
收到offer了!!!!
7251
10
...
秋招之路:零基础游戏引擎/图形方向求职总结
5766
正在热议
#
25届秋招总结
#
247557次浏览
2012人参与
#
学历or实习经历,哪个更重要
#
41055次浏览
299人参与
#
北方华创开奖
#
22778次浏览
259人参与
#
地方国企笔面经互助
#
2538次浏览
6人参与
#
你最想要的公司福利是?
#
39942次浏览
126人参与
#
选完offer后,你后悔学本专业吗
#
10408次浏览
75人参与
#
面试题刺客退退退
#
137118次浏览
2092人参与
#
国企/银行/研究所公司爆料
#
89702次浏览
412人参与
#
应届生被毁约被毁意向了怎么办
#
27112次浏览
238人参与
#
一觉醒来,我觉醒了超级打工人系统
#
2887次浏览
35人参与
#
机械应届生薪资要多少才合适?
#
12388次浏览
60人参与
#
查收我的offer竞争力报告
#
16754次浏览
228人参与
#
校招入职后的感受
#
156925次浏览
1961人参与
#
你觉得第一学历对求职有影响吗?
#
14880次浏览
121人参与
#
没有实习经历,还有机会进大厂吗
#
805017次浏览
13814人参与
#
我的工作日记
#
21173次浏览
270人参与
#
不给转正的实习,你还去吗
#
1516887次浏览
16965人参与
#
寒假躺平还是提前实习
#
58412次浏览
438人参与
#
总结:哪家公司面试体验感最差
#
25738次浏览
129人参与
#
秋招OC许愿
#
226549次浏览
1871人参与
#
如何写一份好简历
#
602091次浏览
8441人参与
牛客网
牛客企业服务