首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
滴滴
校招火热招聘中
官网直投
相关推荐
追赶太阳的鸽子
05-10 17:10
硬件测试
闲扯一下英伟达和英特尔工作体验
讲讲具体工作体验,不得不说,Intel工作确实非常舒服,真正的WLB,周围领导和同事也非常nice(个例除外),NV则要稍微累一点,不过也还可以接受吧,毕竟人家股票牛逼啊。。。。总的来说,都是比国内公司的强度低的,这一点毫无疑问
投递英伟达等公司7个岗位 >
点赞
评论
收藏
转发
一面终结者
05-14 16:16
已编辑
蚌埠坦克学院 计算机类
云智一面
我也能二面的吗,项目给我拷打的汗流浃背,说好的面30分钟,给我面了快50分钟,最后给我拷打压栈和出栈,给我搞的汗流浃背,下来秒过,二面问啥啊,我感觉项目,操作系统 ,cpp都问了,二面他要干嘛
北京云智软通信息技术有限公司西安分公司二面9人在聊
点赞
评论
收藏
转发
26加瓦鼠鼠
04-09 09:31
莆田学院 计算机类
我等了你8天,你却...
时隔8日hr终于回复了,我茶不思饭不想了8天,他说我不合适😭,兄弟们我要掉小珍珠了😭渣男 #沉淀# #黑皮体育生# #java#
点赞
评论
收藏
转发
All_is_Well_
昨天 23:57
门头沟学院 电子信息类
牛油们来看乐子
楼主bg双非本硕,无实习经验,简历上是烂大街项目,java后端暑期实习从3月中旬开始投递,基本上能投的都投了美团,阿里国际一面挂盒马二面挂腾讯3进3出,只有一次进了二面58面完泡池子现在只有两个小厂日常offer大伙觉得以楼主的bg,面试机会算多吗,如果算多的话挂的原因是学历实习不占优势还是可能楼主面试表现不好呢大伙畅所欲言
投递美团等公司10个岗位 >
实习,投递多份简历没人回复怎么办
找实习多的是你不知道的事
点赞
评论
收藏
转发
点赞
收藏
评论
分享
回复帖子
全站热榜
1
...
瑞幸java校招二面(史诗级80min)
8436
2
...
送花给牛友,不做“白嫖党”!牛客互动新功能上线啦!
7779
3
...
CS硕 只看40w+且965 能投啥
7122
4
...
5.16校招&实习招聘信息汇总
6774
5
...
腾讯 后台开发 一面
5177
6
...
【进面核心】如何紧盯个人简历与企业需求的契合度
5094
7
...
阿里oc
5094
8
...
滴滴秋储后端(秒挂)
4407
9
...
许愿滴滴秋储OC,最后一个大厂了
4078
10
...
快手二面g
3276
正在热议
#
牛客帮帮团来啦!有问必答
#
730214次浏览
11737人参与
#
非技术岗是怎么找实习的
#
74697次浏览
1398人参与
#
海康威视求职进展汇总
#
91617次浏览
1094人参与
#
浅聊一下我实习的辛苦费
#
81589次浏览
763人参与
#
如何写一份好简历
#
263200次浏览
3965人参与
#
硬件人求职现状
#
185076次浏览
2709人参与
#
通信硬件人笔面经互助
#
111868次浏览
2263人参与
#
面试等了一周没回复,还有戏吗
#
40616次浏览
500人参与
#
机械制造面试记录
#
37633次浏览
505人参与
#
24届营销人拿到了几个offer
#
4247次浏览
62人参与
#
铜五铁六真的存在吗?
#
28299次浏览
298人参与
#
实习生应该准时下班吗
#
76877次浏览
571人参与
#
打工人的辛酸
#
8617次浏览
134人参与
#
运营人的第一份offer应该如何选
#
35307次浏览
643人参与
#
美的求职进展汇总
#
39001次浏览
419人参与
#
如何看待offer收割机的行为
#
224146次浏览
3256人参与
#
产品实习,你更倾向大公司or小公司
#
36480次浏览
558人参与
#
数据人offer决赛圈怎么选
#
44817次浏览
727人参与
#
实习与准备秋招该如何平衡
#
171969次浏览
3113人参与
#
通信硬件薪资爆料
#
200883次浏览
1823人参与
牛客网
牛客企业服务