免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3341 | 回复: 10
打印 上一主题 下一主题

[C++] 修改类库头文件使私有成员变公有成员影响链接吗? [复制链接]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015元宵节徽章
日期:2015-03-06 15:52:30
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-11-26 22:24 |只看该作者 |倒序浏览
一个c++写的类编译成动态连接库了,
现在我有动态连接库文件和头文件,
现在我通过继承使用这个类库,子类没办法使用父类的私有成员,
我想把父类头文件中的私有成员都改成公有成员,
然后在子类中直接使用,请问这样做会影响最后的目标代码的链接吗?

论坛徽章:
0
2 [报告]
发表于 2015-11-27 15:22 |只看该作者
库的头文件是给你用的,你改了库的头文件,so 没有被重新编译,修改没有用的。典型的“掩耳盗铃” 啊。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2015-11-27 15:39 |只看该作者
可能会改变类的内存布局,导致两边不一致

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015元宵节徽章
日期:2015-03-06 15:52:30
4 [报告]
发表于 2015-12-01 18:46 |只看该作者
回复 3# hellioncu

自己试了一个简单的例子,好像可以的。
我再测试一些复杂的例子看看

   

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
5 [报告]
发表于 2015-12-02 09:31 |只看该作者
成员变量估计可以,因为它是通过偏移量直接算出来的(但有很小的概率可能会改变内存布局)。如果是成员函数,应该是肯定不行(指VC,MINGW等),私有成员函数不会导出,最后肯定链接不过。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015元宵节徽章
日期:2015-03-06 15:52:30
6 [报告]
发表于 2015-12-03 21:15 |只看该作者
class.tar.gz (649 Bytes, 下载次数: 8) 回复 5# w_anthony

这里是一个例子,在linux 下的好像修改private 为public (成员数据或者成员函数)不影响链接和程序运行。

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
7 [报告]
发表于 2015-12-03 22:18 |只看该作者
童鞋你在玩火……
你要干的事我充分完全理解,有时候的确是没办法的,不过奉劝你一句,多行夜路终见鬼,常在河边走哪有不湿鞋,C++标准里明确禁止你这么干,虽然目前绝大多数编译器不会在这种事情上给你挖坑,但哪天要是遇到什么古怪的问题也是完全有可能滴,到时候你只能忍住泪水站起来撸……

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
8 [报告]
发表于 2015-12-04 10:05 |只看该作者
回复 6# neodreamerus


    linux上GCC我也不确定行不行,既然你试了可以,那就应该是可以吧。关键是Linux上的GCC默认所有函数都是导出的,所以可能把私有函数也导出了。不过我之前也说了VC、MINGW都是windows上的编译器,默认都是不导出的,如果要求导出指定的类,但某个成员函数若是私有的,则不会被导出来。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2015-12-04 10:52 |只看该作者
虽然我从不用C++,但感觉你在玩火

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
10 [报告]
发表于 2015-12-04 11:59 |只看该作者
本帖最后由 zylthinking 于 2015-12-04 12:01 编辑
neodreamerus 发表于 2015-11-26 22:24
一个c++写的类编译成动态连接库了,
现在我有动态连接库文件和头文件,
现在我通过继承使用这个类库,子类 ...


我支持你, 让那一帮什么将来换编译器,换平台, 换电脑, 换脑袋, 换屁股的可能就死吧;
前几年做网络协议, 我就说你干嘛把所有字段弄成大端的, 加了一堆htonl, ntohl之类的狗屁, 麻烦+拖累性能啊, 一个孙子非要坚持说夸平台啊, CPU啊, 标准做法什么的
到现在几年过去了, 那玩意都已经作废废了, 也没见它曾经跨到哪里去
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP