首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-07 18:34
拼多多集团-PDD_服务端研发工程师(准入职员工)
那次评审后,我第一次接住了真正的架构题
第一次被拉进技术评审会时,我以为自己只是去旁听。结果会开到一半,大家盯着一段异常波动的调用链,讨论一个老问题: 流量上来以后,某个核心模块偶发超时,重试一多,后面的服务压力也跟着抬起来。 当时没有谁直接把答案告诉我。导师只说了一句:“你先别急着改代码,先判断问题到底出在哪一层。”这句话我记了很久。因为真正有挑战的技术工作,第一步往往不是写,而是判断。 接下来几天,我补链路、看日志、对照监控,把请求路径一点点拆开。最开始我也怀疑过是不是单点性能问题,但越看越发现,问题没那么简单。它不是某一行代码突然变慢,而是高并发下,上下游配合方式开始变得脆弱:重试策略叠加、依赖调用放大、部分节点抖动后缺少足够...
点赞
评论
收藏
分享
昨天 15:23
门头沟学院 测试开发
虾皮内推 虾皮内推码
友友们,虾皮的校招内推开始了! 内推码:NTA6LIk 虾皮内推链接: https://app.mokahr.com/recommendation-apply/shopee/2964?recommendCode=NTA6LIk 欢迎大家投递我们的虾皮,有问题评论区打出来! 虾皮是一个极好的工作场所,加入我们的大家庭!
点赞
评论
收藏
分享
03-23 14:44
天津大学 嵌入式硬件工程师
中9本目前无offer
各位牛牛们能给我提提意见吗
985本硕1个中小厂of...
点赞
评论
收藏
分享
02-23 09:22
山东科技大学 golang
暑期实习求指导
双非一本,八股刚开始,这个简历能找到实习吗。。。
零零幺零零幺:
至少再做一个项目,然后猛投小厂,不然有点难
点赞
评论
收藏
分享
04-03 11:29
西安电子科技大学 Java
面试官问"try-catch影响性能吗",我用数据打脸
面试的时候被问到这个问题:try-catch 会影响性能吗?当时我有点懵,回答了一个模糊的"会有一点影响吧"。面试官追问:影响多大?什么情况下影响大?我就说不上来了。回来之后认真研究了一下,发现这个问题的答案比想象中有意思。先说结论在现代 JavaScript 引擎中,try-catch 本身几乎不影响性能,但异常抛出是昂贵的操作。听起来有点绕?用人话说就是:代码外面套一层 try-catch → 基本没影响代码里频繁 throw Error → 性能会很差下面用数据说话。实测数据我写了个简单的测试: const iterations = 1000000; // 测试1:不...
牛客在线求职答疑中心
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
谁都可能在说谎,但财报不会骗人
3.7W
2
...
大模型Agent面试全攻略(附答题思路)
1.4W
3
...
春招产品内卷到什么程度了
8042
4
...
秋招失利别慌,好offer不怕晚
6255
5
...
只有我觉得暑期很难找吗?!
5842
6
...
上线一个月了,说几句真心话
5223
7
...
普通人不配学计算机的话是否是计算机已死?
5035
8
...
携程工作体验
4903
9
...
腾讯云智-暑期实习后端开发一面
3795
10
...
我来的时候,江水很平静
3383
创作者周榜
更多
正在热议
更多
#
给工作过的公司写一条大众点评,你会怎么写?
#
5751次浏览
93人参与
#
春招至今,你收到几个面试了?
#
48146次浏览
686人参与
#
厦门银行科技岗值不值得投
#
18016次浏览
419人参与
#
Agent面试会问什么?
#
15659次浏览
499人参与
#
一人分享一个skill
#
3940次浏览
111人参与
#
烂工作和没工作哪个更痛苦?
#
13924次浏览
222人参与
#
面试体验最好和最差的公司
#
16393次浏览
97人参与
#
AI替代不了什么?
#
9364次浏览
131人参与
#
我是XXX,请攻击我最薄弱的地方
#
71286次浏览
469人参与
#
现在入门AI首先要做什么?
#
3008次浏览
75人参与
#
面试尴尬现场
#
223873次浏览
868人参与
#
学历VS实习,哪个更重要?
#
24338次浏览
320人参与
#
我们是不是被“优绩主义”绑架了?
#
43538次浏览
533人参与
#
运营每日一题
#
134000次浏览
923人参与
#
小红书求职进展汇总
#
234608次浏览
1391人参与
#
实习心态崩了
#
113050次浏览
613人参与
#
你找工作想离家近 or 离家远?
#
45977次浏览
366人参与
#
央国企投递记录
#
186745次浏览
1706人参与
#
机械人面试中的常问题
#
266108次浏览
3684人参与
#
如何提高实习转正率?
#
103940次浏览
629人参与
#
携程工作体验
#
27478次浏览
104人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务