首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用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
Joran_02
浙江万里学院 C++
然后书上举了两个 指针转换的例子。你动手写一写
点赞
回复
分享
发布于 2017-06-24 19:54
Joran_02
浙江万里学院 C++
我去翻了下,根据上下文理解。就是这个意思
点赞
回复
分享
发布于 2017-06-24 19:52
Joran_02
浙江万里学院 C++
写的太概念性了吧,愿意应该是,基类的对象可以独立存在,独立存在的话,那就不是派生类对象的一部分了---这就是那个可能不是。
点赞
回复
分享
发布于 2017-06-24 19:46
MatthewMatt
楼主
家里蹲大学 C++
感谢各位大佬的回复。我在C++ primer 5th p534里有看到这么一句话“一个基类的对象可能是派生类对象的一部分,也可能不是”,请问下这句话是什么意思呢?我没有搞太懂,是不是和前面所表述的意思不一样?
点赞
回复
分享
发布于 2017-06-22 09:49
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
Joran_02
浙江万里学院 C++
会包含。我给你一个C实现c++多态和继承的例子
点赞
回复
分享
发布于 2017-06-22 07:37
JEWELCCLi
腾讯_测试开发
存在,最直接的例子就是多态机制中的虚函数表,可以百度下陈皓大神的那个blog,那个经典啊,有图有理,直观明了
点赞
回复
分享
发布于 2017-06-22 07:10
艾德
福建工程学院 C++
应该吧,举个例子。父类指针指向子类对象,父类指针可以访问private继承的子类对象中属于父类部分的成员,所以内存应该存在
点赞
回复
分享
发布于 2017-06-22 00:26
harry502
重庆邮电大学 C++
是的...
点赞
回复
分享
发布于 2017-06-21 23:35
暂无评论,快来抢首评~
相关推荐
04-09 20:24
门头沟学院 测试工程师
我只是不想痛苦
讨厌为什么要在毕业的时候告诉我没有HC后悔为什么中考发挥失常没考上重点高中,为什么心态永远到关键时刻那么差后悔为什么高中不努力点上个一本后悔为什么大学去ALL IN ACM不早点实习多几段经历不是简历挂,就是二面挂,最终全在池子里泡死被人横向,我好痛苦,一到晚上就想哭,每天晚上不到两三点无法入睡,也睡不久,起床就担心手机传来被HR挂掉的信息,最抱有期望的依旧溺死在池子里,到底哪里还有机会,哪里还有我的容身之处,生活的意义到底是什么?
点赞
评论
收藏
分享
04-08 08:48
蚌埠坦克学院 嵌入式软件开发
嵌入式能拿下那么多offer全靠这些
嵌入式能拿下那么多 offer,从来不是靠“会点单片机”这么简单,而是靠一整套扎实到能打穿面试的能力体系。第一,基础必须硬。C 语言不是会写 if/for 就够了,指针、函数指针、结构体对齐、内存布局、volatile、const 的本质、栈和堆的区别,这些都要能讲清楚底层逻辑。很多人死在“看起来会写代码,但解释不清为什么这样写”。面试官要的不是语法熟练工,而是能理解编译器和内存行为的人。第二,数据结构不是摆设。链表、队列、栈这些在嵌入式里是常用工具,而不是考试题。你要能在没有 STL 的情况下自己实现,并且知道时间复杂度、使用场景,以及在资源受限情况下如何取舍。比如环形缓冲区、内存池,这些都...
点赞
评论
收藏
分享
04-10 10:22
百度_golang工程师(实习员工)
双非暑期终于结束了
感觉自己还是挺狗运的,比不上牛客这些双非大佬随便秒终于戴上红围脖了,xdm 加油
点赞
评论
收藏
分享
03-31 23:12
已编辑
门头沟学院 Java
27届java简历求拷打
bg双2,投了很多中大厂基本都简历挂,uu们帮忙看看还能怎么优化一下呢,要不要把第二个项目换成agent(还是rpc?)
简历中的项目经历要怎么写
点赞
评论
收藏
分享
04-08 17:09
门头沟学院 研发工程师
4.8 - 京东零售 开发-一面
🕐面试时间:30min❓面试问题:自我介绍面试官一直没理解第一个项目到底是干嘛的,然后给看了看前端界面,然后前端的配置信息是怎么存的,后端是怎么做解析的,表结构是怎么样的(感觉是自己的表达能力有所欠缺,搞得面试官有点不耐烦了)mysql 的b树和b+树有什么区别,优势在哪,为什么能减少访问磁盘的次数(这里没答到点子上)redis 的常用数据结构,你平常是怎么用的算法:爬楼梯🙌面试感想:g
查看8道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
中国电信笔试,提前20分钟交卷了TT
5272
2
...
后端开发到底要不要无脑转Agent?
5043
3
...
携程4.12笔试
2402
4
...
4.10京东后端实习一面凉经
2148
5
...
字节剪映123面
2124
6
...
我的求职充满着失败
2093
7
...
美团暑期笔试 拼尽全力无法战胜
1885
8
...
腾讯云智暑期~
1763
9
...
测试简历点评,为什么你的简历约不到面试?
1596
10
...
美团前端暑期一二面面经
1526
创作者周榜
更多
正在热议
更多
#
我的求职进度条
#
990051次浏览
6565人参与
#
实习教会我的事
#
73693次浏览
508人参与
#
厦门银行科技岗值不值得投
#
19089次浏览
423人参与
#
从投递到OC,你用了多久
#
1594次浏览
14人参与
#
总结:哪家公司最喜欢泡池子
#
168252次浏览
575人参与
#
一人一道大厂面试题
#
127449次浏览
1314人参与
#
哪些公司一直卡在简历筛选
#
106891次浏览
369人参与
#
我想象的实习vs现实的实习
#
333012次浏览
2298人参与
#
Agent面试会问什么?
#
40584次浏览
1469人参与
#
米哈游笔试
#
656415次浏览
1160人参与
#
一人分享一个skill
#
10606次浏览
248人参与
#
拿到offer之后,可以做些什么
#
105350次浏览
512人参与
#
春招至今,你收到几个面试了?
#
112771次浏览
1370人参与
#
说说你知道的学历厂
#
402579次浏览
1439人参与
#
有深度的简历长什么样?
#
54045次浏览
731人参与
#
上班以后,你还有哪些坚持的爱好?
#
30346次浏览
303人参与
#
今年你最想重开的一场面试是?
#
103879次浏览
357人参与
#
米哈游工作体验
#
29991次浏览
145人参与
#
bilibili求职进展汇总
#
192201次浏览
1095人参与
#
我是XXX,请攻击我最薄弱的地方
#
73716次浏览
503人参与
#
通信/硬件的薪资开多少,才值得去?
#
76954次浏览
408人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务