首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
秋招专场
校招火热招聘中
官网直投
相关推荐
姐妹725662405号
06-04 23:58
已编辑
门头沟学院 电子信息类
避雷?海信就离谱
两个星期前投的简历,过了两天上官网看已经进人才库了,就没管了。又过了几天突然发个短信过来打赢复活赛了,做又臭又长的北森测评,还外带一个英语口语ai面。面完了一个多星期一直卡在测评已完成,今天再看,又进人才库了,合着把我拉起来做个脑掺测评是吧。看牛客也没海信软开的面经,不招人别浪费人时间行吗?
投递海信集团等公司7个岗位 >
我的实习求职记录
点赞
评论
收藏
转发
newXX
05-31 22:48
门头沟学院 电子信息类
云智面经
时间有点长了,随意记录一下5.13 投递5.14约5.15一面5.16约5.17二面5.23约5.24加面,我申请改时间5.30约5.31加面一面:50min轻松愉快1. 问我哪里人,有没有留武汉意向2. redisson实现3. rabbitmq延迟消息4. mysql的底层数据结构5. 联合索引对比多个单列索引好处6. tcp和udp7. 应用之间tcp的发送以及遇到问题怎么解决二面 20min:面试官急急国王,也没开摄像头,20min包含八股+手撕。可能就是这个原因导致加面三面 40min :1. gc垃圾回收,仔细问了g1和其他垃圾回收器的区别2. redisson原理3. 实现日志输...
查看11道真题和解析
点赞
评论
收藏
转发
缘气少女
04-23 10:48
已编辑
西北大学 新闻传播学类
中科大复试被刷。。。四月初找工作基本无面试岗位回复少春招结束了还泡在池子里😭
投递中国科学技术大学等公司7个岗位
点赞
评论
收藏
转发
生椰抹茶
06-03 21:07
已编辑
门头沟学院 计算机类
美团到家前端实习一面
整体面试氛围还挺轻松,面试官人很好,他笑我也笑,我笑我啥也不会🥲自我介绍项目介绍怎么学的前端vue是怎么学的项目遇到的难点(说了axios二次封装和菜单权限管理问我用户没有权限访问时做了什么提示吗哈希表提供了哪些操作 这些操作的时间复杂度进程和线程常见设计模式,用过哪些模式(单例 工厂 发布订阅 代理对单例模式的理解在项目中用过工厂模式吗http和httpshttp和https的端口是多少https加密过程dom和attribute和property两栏布局==和===的区别字符串‘55’==数字55结果是true还是false函数输出题 this指向promise.all和promise....
查看3道真题和解析
点赞
评论
收藏
转发
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
计算机专业可以去哪些央国企(总论篇)?
4.8W
2
...
暑期拿到了4家大厂offer,而我决定都放弃
5271
3
...
【🎁】25届硬件牛牛互助计划(1期)
5107
4
...
OPPO OC,欧欧欧欧欧欧
4944
5
...
大二终于拿下大厂(附 timeline)
4722
6
...
华黑子的暑期实习总结
4537
7
...
一个大学毕业生在河边哭,他哭的如此伤心,连河神都动容了。河神拿着一份月薪两万但996的工作offer,和一份月薪2000但朝九暮五、双休的工作offer,问:“这两个哪个是你的?”毕业生哭着说:“都不
4533
8
...
六月初被无良央企毁三方 现在很迷茫
4488
9
...
拒了荣耀offer,感觉自己很丑陋
4223
10
...
网易互娱40min(感觉是G了)
4040
正在热议
#
和牛牛一起刷题打卡
#
19631次浏览
1663人参与
#
0offer是寒冬太冷还是我太菜
#
455693次浏览
5142人参与
#
OPPO开奖
#
20872次浏览
306人参与
#
牛客帮帮团来啦!有问必答
#
1157421次浏览
17221人参与
#
学历对求职的影响
#
161547次浏览
1815人参与
#
小厂实习有必要去吗
#
3205次浏览
38人参与
#
不去互联网可以去金融科技
#
22821次浏览
299人参与
#
通信和硬件还有转码的必要吗
#
11394次浏览
101人参与
#
机械人与华为的爱恨情仇
#
8020次浏览
67人参与
#
简历无回复,你会继续海投还是优化再投?
#
25120次浏览
355人参与
#
大厂无回复,继续等待还是奔赴小厂
#
5482次浏览
39人参与
#
参加过提前批的机械人,你们还参加秋招么
#
14675次浏览
349人参与
#
实习与准备秋招该如何平衡
#
203925次浏览
3635人参与
#
国企是理工四大天坑的最好选择吗
#
2297次浏览
34人参与
#
产品人求职现状
#
57850次浏览
831人参与
#
晒一晒我的offer
#
3834743次浏览
58675人参与
#
产运销实习日记
#
1258次浏览
47人参与
#
面试被问第一学历差时该怎么回答
#
19472次浏览
213人参与
#
为什么国企只招应届生
#
58852次浏览
434人参与
#
你见过最离谱的招聘要求是什么?
#
30042次浏览
256人参与
#
互联网公司评价
#
97954次浏览
1282人参与
#
去年你投递实习了吗?
#
8436次浏览
147人参与
牛客网
牛客企业服务