CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

急,谁明白是怎么调用的Date()构造函数?

楼主zxlxg(xgl)2005-01-13 13:09:05 在 C/C++ / C++ 语言 提问

下面的程序输入4个职工记录并保存在一个数组中,然后显示输出数组中的刚输入的职工记录:  
  #include<iomanip.h>  
  #include<string.h>  
  class   Date{               //日期类  
  short   year;       //年  
  short   month;     //月  
  short   day;         //日  
  public:  
  Date();  
  Date(int   y,int   m,int   d):year(y),month(m),day(d){}  
  void   show(){cout<<year<<'.'<<month<<'.'<<day;}  
  };  
  class   Staff{                             //职工类  
  char   staffNo[5];             //职工号  
  char   name[10];                 //姓名  
  char   sex;                           //性别,用M表示男、用F表示女  
  Date   birthDay;                 //出生日期  
  public:  
  Staff();  
  Staff(const   char   st_no[],const   char   st_name[],char   st_sex,  
  const   Date   &st_date):birthDay(st_date),sex(st_sex)  
  {  
  //将st-no中的最多4个字符的字符串复制到staffNo中  
  strncpy(staffNo,st_no,4);  
  //将st-name中的最多9个字符串复制到name中  
  strncpy(name,st_name,9);  
  }  
  void   show()  
  {  
  cout<<endl<<setw(5)<<staffNo  
  <<setw(10)<<name  
  <<setw(3)<<sex;  
  birthDay.show();  
  }  
  };  
  Date::Date()  
  {  
  cout<<endl<<"请输入年月日:";  
  cin>>year>>month>>day;  
  cin.ignore(80,'\n');     //吃掉行尾多余字符(如果有的话)  
  }  
  Staff::Staff()  
  {  
  cout.setf(ios::left,ios::adjustfield);  
  cout<<endl<<"请输入职工号:";  
  cin.getline(staffNo,5);  
  cin.ignore(80,'\n');  
  cout<<endl<<"请输入姓名:";  
  cin.getline(name,10);  
  cin.ignore(80,'\n');  
  cout<<endl<<"请输入性别(M/F):";  
  cin>>sex;  
          cin.ignore(80,'\n');  
  }  
  void   main()  
  {  
  Staff   ss[4];  
  for(int   i=0;i<4;i++)ss[i].show();  
  }  
  问:  
  (1) 输入职工记录的操作是执行主函数的哪个语句时完成的?调用的是Staff类的哪个构造函数?  
  (2) 输入职工记录的过程中包括输入出生日期,这是在哪个函数中完成的?  
  第2问不知怎么回事,请高手解答!调试第次都是执行到Staff::Staff()后就转向执行Date::Date(),是什么机理?  
  问题点数:100、回复次数:7Top

1 楼polarman(北极人http://blog.csdn.net/polarman)回复于 2005-01-13 13:16:01 得分 0

(1) 输入职工记录的操作是执行主函数的哪个语句时完成的?调用的是Staff类的哪个构造函数?  
  Staff::Staff()  
  (2) 输入职工记录的过程中包括输入出生日期,这是在哪个函数中完成的?  
  Date::Date()  
   
  调试第次都是执行到Staff::Staff()后就转向执行Date::Date(),是什么机理?  
   
  因为Staff类中声明Date   birthDay成员Top

2 楼goodluckyxl(被人遗忘的狗)回复于 2005-01-13 13:22:46 得分 40

staff有   data成员你不显式构造  
  当然系统会默认构造对象  
   
  Top

3 楼carylin(林石)回复于 2005-01-13 13:23:44 得分 0

【(1) 输入职工记录的操作是执行主函数的哪个语句时完成的?调用的是Staff类的哪个构造函数?】  
  因为Staff类是从Date类派生而来的,语句Staff   ss[4];实际上先调用Date类的Date()构造函数,再是类Staff自己的构造函数Staff()  
   
  【(2) 输入职工记录的过程中包括输入出生日期,这是在哪个函数中完成的?】  
  从前一问不难理解,这当然是在调用构造函数Date::Date()是完成的。Top

4 楼goodluckyxl(被人遗忘的狗)回复于 2005-01-13 13:24:31 得分 0

(1) 输入职工记录的操作是执行主函数的哪个语句时完成的?调用的是Staff类的哪个构造函数?  
  不是很显然的在staff构造函数中cin了吗?    
  每个字段都对应输入了Top

5 楼lzhq1975(星期天)回复于 2005-01-13 13:25:15 得分 0

(1) 输入职工记录的操作是执行主函数的哪个语句时完成的?调用的是Staff类的哪个构造函数?  
        Staff   ss[4];\\定义类,无初始值,调用   Staff::Staff();数组也就  
   
  (2) 输入职工记录的过程中包括输入出生日期,这是在哪个函数中完成的?  
  第2问不知怎么回事,请高手解答!调试第次都是执行到Staff::Staff()后就转向执行Date::Date(),是什么机理?  
   
  Top

6 楼zxlxg(xgl)回复于 2005-01-13 13:39:49 得分 0

我主要是不明白第2问的机理!另外这两个类明显不是派生关系,有人说“staff有   date成员你不显式构造,当然系统会默认构造对象”,那么为什么是在其它成员都没构造之前最先就构造了Date成员,应该是其它成员构造完之后系统发现Date成员没有构造再构造它呀?Top

7 楼ohayou()回复于 2005-01-13 14:19:27 得分 60

那么为什么是在其它成员都没构造之前最先就构造了Date成员,应该是其它成员构造完之后系统发现Date成员没有构造再构造它呀?  
  ---------------------------------------------------------------------  
  1   没有其它需要构造的成员了   别的都是简单变量不是类  
  2   这是编译的时候就生成的代码   编译器看你构造函数没有显式调用Date的构造   自动加上的Top

相关问题

  • 构造函数可以调用构造函数吗?
  • 构造函数中调用构造函数.
  • 关于调用默认构造函数
  • 调用基类的构造函数
  • 我可以在构造函数里调用几个函数吗?
  • 如何在一个构造函数中调用另一个构造函数
  • 什么时候调用构造函数和拷贝构造函数?
  • 请问构造函数中能否调用虚函数,为什么?
  • 关于在类的构造函数里调用虚函数的问题!!
  • 调用另一个构造函数方法

关键词

  • date
  • staff
  • month
  • short
  • cout
  • year
  • day

得分解答快速导航

  • 帖主:zxlxg
  • goodluckyxl
  • ohayou

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo