社区
C语言
帖子详情
基类A,类B直接继承A,即PUBLIC A。那么,如果A 改变了,B是否需要重新编译?
iamxia
2002-11-15 03:44:19
基类A,类B直接继承A,即PUBLIC A。那么,如果A 改变了,B是否需要重新编译?
还是如果B涉及到A改动的地方就需要重新编译?
...全文
121
11
打赏
收藏
基类A,类B直接继承A,即PUBLIC A。那么,如果A 改变了,B是否需要重新编译?
基类A,类B直接继承A,即PUBLIC A。那么,如果A 改变了,B是否需要重新编译? 还是如果B涉及到A改动的地方就需要重新编译?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
要。
229-C++
继承
与多态(理解虚
基
类
和虚
继承
)
多重
继承
好处是代码的复用,相当于一个派生
类
有多个
基
类
。 既从A
继承
又从B
继承
,C是从A,B多
继承
而来; C有2个
基
类
:A和B; C可以把A和B的成员都
继承
而来,复用起来 虚
基
类
拥有纯虚函数的
类
称为 虚
基
类
被虚
继承
的
类
称作虚
基
类
,vbptr和vbtable virtual的用法: 1、修饰成员方法是虚函数 2、可以修饰
继承
方式,是虚
继承
。被虚
继承
的
类
,称作虚
基
类
A被B虚
继承
,所以A是虚
基
类
我们打开命令提示符来看看 A被B虚
继承
,所以A是虚
基
类
A被虚
继承
,A本身内存布局没有变化 我
C++
类
继承
基础6——多重
继承
与虚
基
类
虚
基
类
是在派生
类
定义时,指定
继承
方式时声明的。class 派生
类
名: virtual 访问标签 虚
基
类
名,... { //
类
体成员列表还有一种形式是class 派生
类
名: 访问标签 virtual 虚
基
类
名,... {// 成员列表
需要
注意,为了保证虚
基
类
在派生
类
中只
继承
一次,应当在该
基
类
的所有
直接
派生
类
中声明为虚
基
类
。否则仍然会出现对
基
类
的多次
继承
(我们下面会举例子)例:虚
基
类
举例class A { //声明为
基
类
A
public
:A(int n) { //A
类
的构造函数nv=n;
C++的虚
基
类
和虚
继承
多重
继承
: 好处是代码的复用 相当于一个派生
类
有多个
基
类
既从A
继承
又从B
继承
,C是从A,B多
继承
而来,C有2个
基
类
:A和B,C可以把A和B的成员都
继承
而来,复用起来被虚
继承
的
类
称作虚
基
类
vbptr和vbtable A被B虚
继承
,所以A是虚
基
类
我们打开命令提示符来看看A被虚
继承
,A本身内存布局没有变化我们看看B的内存布局: 原本应该最上面放ma,然后放mb,但是现在多了一个vbptr,那么A被B虚
继承
的ma跑哪里去了?跑到派生
类
最后面来了。vbptr指向的是 vbtable
C++学习笔记-
继承
类
之间可以建立联系,这就使得
类
可以有某种关系
类
之间的关系 has-A:包含关系,一个
类
使用另一个已经定义好的
类
的数据 uses-A:使用关系,友元或者对象参数传递 is-A:是的关系,这就是
继承
,具有传递性不具有对称性
继承
是
类
之间定义的一种重要关系,一个B
类
继承
A
类
,或称从
类
A派生
类
B,
类
A称为
基
类
(父
类
),
类
B称为派生
类
(子
类
)
基
类
和派生
类
类
继承
关系的语法形式 class 派生
类
名:
基
类
...
【c++】
继承
学习(一):
继承
机制与
基
类
派生
类
转换
🔥个人主页:Quitecoder🔥专栏:c++笔记仓
继承
(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有
类
特性的基础上进行扩展,增加功能,这样产生新的
类
,称派生
类
。
继承
呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,
继承
是
类
设计层次的复用通过
继承
,子
类
可以重用父
类
的代码,这有助于减少代码冗余和复杂性,并增加代码的可复用性子
类
和父
类
是
继承
关系中的两个基本概念:父
类
/
基
类
: 父
类
是一个更一般的
类
,它定义了一
C语言
70,032
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章