幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2558|回复: 1

[通用编程] 问个构造函数的问题

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2008-6-14 20:35:40 | 显示全部楼层 |阅读模式
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4. class StudentID
  5. {
  6. public:
  7.     StudentID(int id=0)
  8.     {
  9.         value = id;
  10.         cout << "assigning student id " << value << endl;
  11.     }
  12.     ~StudentID()
  13.     {
  14.         
  15.         cout << "destructing id " << value << endl;
  16.     }
  17. protected:
  18.     int value;
  19. };
  20. class Student
  21. {
  22. public:
  23.     Student(char *pName="noName",int ssID=0):id(ssID)
  24.     {
  25.         cout << "constructing student " << pName << endl;
  26.         strcpy(name,pName);
  27.         name[sizeof(name)-1] = &#39;\0&#39;;
  28.         
  29.     }
  30. protected:
  31.     char name[20];
  32.     StudentID id;
  33. };
  34. void main()
  35. {
  36.     Student s("Randy",1000);
  37.     Student t("Jenny");
  38. }
复制代码

像以上这个程序, Student(char *pName="noName",int ssID=0):id(ssID) 这里是对冒号后面的数据成员的构造函数进行调用.
而书上说Student构造函数冒号后面如果是 id()形式,表示调用 StudnetID的默认构造函数,且可以省略,
即:
  1. Student(char *pName="noName",int ssID=0):id()
  2.         {
  3.                 cout << "constructing student " << pName << endl;
  4.                 strcpy(name,pName);
  5.                 name[sizeof(name)-1] = &#39;\0&#39;;
  6.                
  7.         }
  8. 可写成:
  9. Student(char *pName="noName",int ssID=0)
  10.         {
  11.                 cout << "constructing student " << pName << endl;
  12.                 strcpy(name,pName);
  13.                 name[sizeof(name)-1] = &#39;\0&#39;;
  14.                
  15.         }
复制代码
表明将调用StudentID的默认构造函数,主函数中两条创建 Student对象的语句都遇到不能匹配StudentI D构造函数的编译错误.

但是我上式把 :id(ssID) 去掉都没有错误, 为什么会这样呢?
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

0

主题

25

帖子

254

积分

③业余

积分
254
发表于 2008-6-15 04:03:43 | 显示全部楼层
因为对Student的构造函数传入的ssID在去掉:id(ssID)之后就根本不产生作用了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-25 09:40 , Processed in 0.022616 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表