免费注册 查看新帖 |

Chinaunix

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

[函数] 构造函数de疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-11 19:53 |只看该作者 |倒序浏览
我对构造函数有些疑问:
"是否在每个类的对象被创建以后就立即调用构造函数?"
如以下程序:
1. #include "iostream.h"
2. class Sub
3.  {
4. public:
5.          Sub(){cout<<"Sub"<<endl;A=10;B=20;C=30;}
6.        void show();
7. private:
8.        int A,B,C;
9. };
10. void Sub::show()
11. {
12.        cout<<A<<" "<<B<<" "<<C<<endl;
13. }
14. class Far
15. {
16. public:
17.        Far(int fa,int fb,Sub s):SS(s){cout<<"Far"<<endl;FA=fa;FB=fb;}
18.        void show();
19. private:
20.        int FA,FB;
21.        Sub SS;
22. };
23. void Far::show()
24. {
25.        cout<<FA<<" "<<FB<<endl;
26.        SS.show();
27. }
28. void main()
29. {
30.        Sub ss;
31.        Far ff(11,22,ss);
32.        ff.show();
33. }
程序的运行结果为:
Sub
Far
11 22
10 20 30
我知道运行结果中的Sub和Far应该分别是在第30句和第31句处创建ss对象和ff对象时调用的构造函数。
但为何在第17句和第21句处创建Sub s和Sub SS时没有调用构造函数?

论坛徽章:
0
2 [报告]
发表于 2004-11-11 20:55 |只看该作者

构造函数de疑问

在17句调用构造函数,只不过不是你实现的构造函数而已,是编译器默认生成的拷贝构造函数。21句是声明语句,不是定义。

论坛徽章:
0
3 [报告]
发表于 2004-11-11 21:19 |只看该作者

构造函数de疑问

因为Far(int fa,int fb,Sub s):SS(s){cout<<"Far"<<endl;FA=fa;FB=fb;}
调用了Sub的默认拷贝构造函数

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-11-11 22:54 |只看该作者

构造函数de疑问

》》"是否在每个类的对象被创建以后就立即调用构造函数?"

什么叫构造函数?
调用它之后你的对象才真正被创建。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP