急,谁明白是怎么调用的Date()构造函数?
下面的程序输入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




