找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1441|回复: 8

关于类数组的输入问题

[复制链接]
发表于 2009-11-3 02:26:37 | 显示全部楼层 |阅读模式 IP:江苏扬州
下面的程序输入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();
}

如果把无参构造函数改成Date::Date(){}和Staff::Staff(){},同时修改主函数,使程序功能不变。我改过以后,总是不对,
在主函数里,要是调用有参构造函数,以数组的方式应该怎么进行呢?
发表于 2009-11-3 02:26:37 | 显示全部楼层 IP:江苏扬州
必须要是数组的话,可以用函数啊,函数去设置啊,比如把他边成成员函数set(...);
回复

使用道具 举报

发表于 2009-11-3 02:26:38 | 显示全部楼层 IP:江苏扬州
这个题目的意思是通过调用有参构造函数如何给在主函数中定义的4个Staff类型的记录赋值?无参构造函数是空的了,要是用ss[i](no,name,sex,birth);这种方式也不对啊
回复

使用道具 举报

发表于 2009-11-3 02:26:39 | 显示全部楼层 IP:江苏扬州
就算你非要用带参数的构造函数,要用不同的值初始化它们,也只有一个一个的来,可以用下面这个思想:
#include <iostream>
using namespace std;
class A
{
int a,b;
public:
A(){}
A(int x,int y){a=x;b=y;}
void show(){cout<<a<<" "<<b<<endl;}
};
int main()
{
A *p[4];
p[0]=new A(1,2);
p[1]=new A(2,3);
p[2]=new A(3,4);
p[3]=new A(4,5);
for(int i=0;i<4;i++)p[i]->show();
system("pause");
return 0;
}
回复

使用道具 举报

发表于 2009-11-3 02:26:40 | 显示全部楼层 IP:江苏扬州
void main()
{

int yr,mh,dy;
char no[5],na[10],sx;
Staff *p[2];

for (int i=0;i<2;i++)
{
cout.setf(ios::left,ios::adjustfield);
cout<<endl<<"请输入年月日:";
cin>>yr>>mh>>dy;
cin.ignore(80,'\n');

cout<<endl<<"请输入职工号:";
cin.getline(no,5);
cin.ignore(80,'\n');
cout<<endl<<"请输入姓名:";
cin.getline(na,10);
cin.ignore(80,'\n');
cout<<endl<<"请输入性别(M/F):";
cin>>sx;
cin.ignore(80,'\n');

Date birth(yr,mh,dy);
p[i]=new Staff(no,na,sx,birth);
}
for(i=0;i<2;i++)
{
p[i]->show();
}

}

我把主程序改成这样了。可是在运行的时候,输出姓名值字符少的正确,可是字符一多就出现乱码,这是怎么回事呢?
回复

使用道具 举报

发表于 2009-11-3 02:26:41 | 显示全部楼层 IP:江苏扬州
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
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,5);
//将st-name中的最多9个字符串复制到name中
strncpy(name,st_name,10);
}
void show()
{
cout<<endl
<<setw(8)<<staffNo
<<setw(13)<<name
<<setw(3)<<sex;
birthDay.show();
}
};

int main()
{
int yr,mh,dy;
char no[6],na[11],sx;
Staff *p[2];
for (int i=0;i<1;i++)
{
cout.setf(ios::left,ios::adjustfield);
cout<<"请输入年月日:";
cin>>yr>>mh>>dy;
cin.ignore(80,'\n');
cout<<endl<<"请输入职工号:";
cin>>setw(5)>>no;
cin.ignore(80,'\n');
cout<<endl<<"请输入姓名:";
cin>>setw(10)>>na;
cin.ignore(80,'\n');
cout<<endl<<"请输入性别(M/F):";
cin>>setw(1)>>sx;
cout<<endl;
Date birth(yr,mh,dy);
p[i]=new Staff(no,na,sx,birth);
}
for(int i=0;i<1;i++)
{
p[i]->show();
delete p[i];
}
system("pause");
return 0;
}
回复

使用道具 举报

发表于 2009-11-3 02:26:42 | 显示全部楼层 IP:江苏扬州
楼主是不是问类数组怎么输入呀
按struct数组那样,依次顺序输入
回复

使用道具 举报

发表于 2009-11-3 02:26:43 | 显示全部楼层 IP:江苏扬州
正确了,谢谢。可是最终改哪儿了?
回复

使用道具 举报

发表于 2009-11-3 02:26:45 | 显示全部楼层 IP:江苏扬州
//将st-no中的最多4个字符的字符串复制到staffNo中
strncpy(staffNo,st_no,5);
//将st-name中的最多9个字符串复制到name中
strncpy(name,st_name,10);

cin>>setw(5)>>no;

cin>>setw(10)>>na;
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 09:29 , Processed in 0.188657 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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