基类A,类B直接继承A,即PUBLIC A。那么,如果A 改变了,B是否需要重新编译?

iamxia 2002-11-15 03:44:19
基类A,类B直接继承A,即PUBLIC A。那么,如果A 改变了,B是否需要重新编译?
还是如果B涉及到A改动的地方就需要重新编译?
...全文
106 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyc_nj 2002-11-18
  • 打赏
  • 举报
回复
要.
public的继承关系,使得B中含有A的部分(一般是在开头位置).含A的部分包括A的成员变量(这个顺序一般和在A中声明的顺序一致),包括A的成员函数,是些offset和vptr, 等等, 这些都有可能因为A的重新编译而有改变.
所以,为保证正确,还是重新编译的好.
HaiFen 2002-11-15
  • 打赏
  • 举报
回复
xiaoyunet(快乐的小猪):只要A的声明变了就要重新编译,因为size也许没
变,但各成员的位置可能变了。
HaiFen 2002-11-15
  • 打赏
  • 举报
回复
如果改动A的声明,要!
如果改动A的实现,不要,relink就OK了!
xiaoyunet 2002-11-15
  • 打赏
  • 举报
回复
这个问题是这样的,如果A的size没有变,B是不需要重新编译的,当然A会重新编译。为什么这样呢,因为编译器在编译时需要确定class 的size,关于这一点,C++之父有讲,为了避免从新编译,可以使用handle类,或者是虚基类,这样不管A怎么变,B都不用重新编译。

muche 2002-11-15
  • 打赏
  • 举报
回复
肯定要的!!
favorit 2002-11-15
  • 打赏
  • 举报
回复
当然要!
vanhui 2002-11-15
  • 打赏
  • 举报
回复
当然要的啦。
caizzrr 2002-11-15
  • 打赏
  • 举报
回复
应该要
shinedreamnt 2002-11-15
  • 打赏
  • 举报
回复
最好应该重新编译,但我不能十分确认,这也是个有意思的问题,比如A
就是改了一点(return 1; 变成return 2;)也许不会有关系,我觉得这可能取决于
编译器的设计和你改动的大小。
efanl 2002-11-15
  • 打赏
  • 举报
回复
凡是用到了A的地方都要重新编译, 不管有没有涉及改动的地方,
毕竟不是DLL呀~~~
cwanter 2002-11-15
  • 打赏
  • 举报
回复
要。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧