设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓名(Name), 性别(Sex),生日(Birthday)和家庭住址(HomeAddress)。成员函数包括人员信息的录入 和显示。还包括构造函数与拷贝构造函数。设计一个合适的初始值。 解:本题为指出构造函数等的调用,加了一些提示语句。
#include<iostream>
#include<cstring>using namespace std;
enum Tsex{mid,man,woman};class Person
{char IdPerson[19]; //身份证号,18位数字char Name[20]; //姓名Tsex Sex; //性别int Birthday; //生日,格式1986年8月18日写作19860818 char HomeAddress[50]; //家庭地址
public:Person(char *,char *,Tsex,int,char *); Person(Person &);Person();~Person();void PrintPersonInfo();void inputPerson();//其他接口函数
};Person::Person(char *id,char *name,Tsex sex,int birthday,char *homeadd)
{cout<<"构造Person"<<endl; strcpy(IdPerson,id); strcpy(Name,name); Sex=sex;Birthday=birthday;strcpy(HomeAddress,homeadd);
}Person::Person()
{cout<<"缺省构造Person"<<endl;IdPerson[0]='\0';Name[0]='\0';Sex=mid; Birthday=0;HomeAddress[0]='\0';
}Person::Person(Person & Ps)
{cout<<"拷贝构造Person"<<endl; strcpy(IdPerson,Ps.IdPerson); strcpy(Name,Ps.Name); Sex=Ps.Sex; Birthday=Ps.Birthday;strcpy(HomeAddress,Ps.HomeAddress);
}
Person::~Person()
{cout<<"析构Person"<<endl;
}void Person::inputPerson()
{ char ch; cout<<"请输入身份证号,18位数字:"<<endl; cin.getline(IdPerson,19); cout<<"请输入姓名:"<<endl; cin.getline(Name,20); cout<<"请输入性别m或w:"<<endl;cin>>ch;if(ch=='m') Sex=man; else Sex=woman; cout<<"请输入生日,格式1986年8月18日写作19860818:"<<endl; cin>>Birthday;cin.get(); //吸收回车符,否则地址输不进去 cout<<"请输入地址:"<<endl; cin.getline(HomeAddress,50);
}void Person::PrintPersonInfo()
{ int i; cout<<"身份证号:"<<IdPerson<<'\n'<<"姓名:"<<Name<<'\n'<<"性别:"; if(Sex==man)cout<<"男"<<'\n';else if(Sex==woman)cout<<"女"<<'\n';else cout<<" "<<'\n'; cout<<"出生年月日:"; i=Birthday; cout<<i/10000<<"年"; i=i%10000;cout<<i/100<<"月"<<i%100<<"日"<<'\n'<<"家庭住址:"<<HomeAddress<<'\n';
}int main()
{Person Ps1("320102811226161","朱海鹏",man,19811226,"南京市黄浦路1号"), Ps2(Ps1),Ps3;Ps1.PrintPersonInfo();Ps2.PrintPersonInfo();Ps3.inputPerson();Ps3.PrintPersonInfo(); return 0;
}