社区
C++ 语言
帖子详情
关于类继承构造的问题
magicalking
2006-08-31 11:14:59
在定义一个子类对象时,总是先调用其基类的构造函数,然后调用子类的构造。那为什么在子类构造中却又可以向其基类构造传递参数?我的意思是,在调用基类构造时子类构造如果未被调用,那么基类构造函数的参数从哪来?
...全文
212
4
打赏
收藏
关于类继承构造的问题
在定义一个子类对象时,总是先调用其基类的构造函数,然后调用子类的构造。那为什么在子类构造中却又可以向其基类构造传递参数?我的意思是,在调用基类构造时子类构造如果未被调用,那么基类构造函数的参数从哪来?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
blue_zyb
2006-08-31
打赏
举报
回复
我认为,确切的说,这个构造顺序指的不是“看到的所谓严格的代码调用次序”,而对对象的构造顺序。也就是说,父类对象会先于子类对象构造出来。例如,下面的代码:
class A
{
public:
int a;
A(int arga)
{
a = arga;
}
};
class B : public A
{
public:
int b;
B (int arga, int argb) : b(argb), A(arga)
{
}
};
int main(int agrc,char *argv[])
{
B bbb(10, 123);
return 0;
}
虽然你单步跟踪可以看到main中定义一个B的对象时,跑到了B的构造函数,但F11下一步马上就会跳到A的构造函数,在B包含的子对象A构造好后再回到除A以外数据成员的构造。对于上面的代码,虽然成员初始化列表中的顺序是b(argb), A(arga),但你可以看到在A的构造函数结束后才会初始化b。
而且,从语法上来说,子对象A会在成员初始化列表(或者说B的constuctor 的{之前)被构造,你不能在constructor中写类似A(11)之类的代码,而如果你在成员初始化列表中没有提供构造函数的话,系统也会调用一个默认的A构造函数来把A先构造出来
晨星
2006-08-31
打赏
举报
回复
楼主想多了。
的确,在调用基类构造时,子类子对象还没有被构造出来。
但那也只能说明不能把子类的成员变量做为参数传给基类构造函数。
而并不能说明任何其它值或变量都不能传。最简单的:传个全局变量,常量,或外界传进来的参数等等总归没问题吗?
Dong
2006-08-31
打赏
举报
回复
那为什么在子类构造中却又可以向其基类构造传递参数?我的意思是,在调用基类构造时子类构造如果未被调用,那么基类构造函数的参数从哪来?
--------------------------------------------------------
这个操作在编译器在编译的时候由编译器插进代码完成
healer_kx
2006-08-31
打赏
举报
回复
看汇编,确实先是基类初始化,如何初始化,当然在派生类内给出参数。你不要认为这个是正常的调用就行了。
类
继承
-
继承
类
的
构造
函数
派生
类
的
构造
函数: 派生
类
不能直接访问基
类
的私有成员,必须通过基
类
提供的公有方法。 派生
类
构造
函数必须使用基
类
的
构造
函数。创建派生
类
对象时,先创建基
类
对象,因此基
类
对象应该在进入派生
类
构造
函数之前被创建...
C++11学习——
继承
构造
函数
什么是
继承
构造
函数 指的是派生
类
通过使用using关键字可以
继承
基
类
中的
构造
函数。 事实上using关键字可以
继承
基
类
中的任何函数。 class A { public: A(int a_) { a = a_; } int a; }; class B :public A { ...
c++
继承
构造
函数
【1】为什么需要
继承
构造
函数? 首先,看看如下代码片段: 1 struct A 2 { 3 A(int i) 4 {} 5 }; 6 7 struct B : A 8 { 9 B(int i) : A(i) 10 {} 11 }; 在C++中非常常见:B派生于A,B在
构造
...
java
类
的
构造
器可以被
继承
吗_java可以
继承
父
类
构造
器吗
一个
类
中如果
构造
方法重写了并且带了参数,那么这个
类
的原来系统默认的无参
构造
方法便消失。由此,若一个父
类
中只有一个带参数的
构造
方法,那么在写其子
类
的
构造
方法时必须先通过super调用父
类
的
构造
方法才能完成...
C++
类
继承
时
构造
函数与析构函数的执行顺序
C++
类
继承
时
构造
函数与析构函数的执行顺序 在C++
类
中,
类
A
继承
类
B时,如果创建一个A的对象时,会首先调用基
类
的
构造
函数,再调用派生
类
的
构造
函数,而析构函数的执行相反,但是当基
类
和派生
类
分别有一个成员对象时...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章