C 习题和解析(类和对象-08)

2008-02-23 05:34:43来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

题16.创建一个employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。把表示构造函数、changname()、display()的函数的原型放在类定义中,构造函数初始化每个成员,display()函数把完整的对象数据打印出来。其中的数据成员是保护的,函数是公共的。
解:
#include<iostream.h>
#include<string.h>
class employee
{
protected:
char name[10]; // 姓名
char street[20]; // 街道地址
char city[10]; // 市
char prov[10]; // 省
char post[7]; // 邮政编码
int no; // 记录序号
public:
employee(char [],char [],char [],char [],char [],int);
void changename(char str[]);
void display();
};
employee::employee(char n[],char s[],char c[],char p1[],char p2[],int num)
{
strcpy(name,n);
strcpy(street,s);
strcpy(city,c);
strcpy(prov,p1);
strcpy(post,p2);
no=num;
}

void employee::changename(char n[])
{
strcpy(name,n);
}

void employee::display()
{
cout<<"输出记录 "<<no<<endl;
cout<<" 姓名:"<<name<<endl;
cout<<"街道地址:"<<street<<endl;
cout<<" 市:"<<city<<endl;
cout<<" 省:"<<prov<<endl;
cout<<"邮政编码"<<post<<endl;
}

void main()
{
employee obj1("王华","中华路15号","武汉市","湖北省","430070",1);
employee obj2("杨丽","天津路30号","南京市","江苏市","210020",2);
obj1.display();
obj2.display();
}

本程式的执行结果如下:
输出记录1
姓名:王华
街道地址:中华路15号
市:武汉市
省:湖北省
邮政编码:430070
输出记录2
姓名:杨丽
街道地址:天津路30号
市:南京市
省:江苏省
邮政编码:210020

-------------------------------------------------------------

题17.修改前一题的类,将姓名构成类name,其名和姓在该类中为保护数据成员,其构造函数为接收一个指向完整姓名字符串的指针,其display()函数输出姓名。然后将employee类中的姓名成员(字符数组)换成name类对象。编制主函数如下:
void main()
{
employee obj("王华","中华路15号"."武汉市","湖北省","430070",1);
obj.display();
obj.changename("王国强");
obj.display();
}

解:
#include<iostream.h>
#include<string.h>
class name
{
protected:
char fname[4]; // 姓
char sname[6]; // 名
public:
name(){}
name(char *);
void changename(char *);
void display();
};

class employee
{
protected:
name na; // 姓名
char street[20]; // 街道地址
char city[10]; // 市
char prov[10]; // 省
char post[7]; // 邮政编码
int no; // 记录序号
public:
employee(char [],char [],char [],char [],char [],int);
void changename(char str[]);
void display();
};

name::name(char *p)
{
int i=0;
while(*p!=' ')
fname[i ]=*p ;
fname[i]='\0';
i=0;
p ;
while(*p!='\0')
sname[i ]=*p ;
sname[i]='\0';
}

void name::changename(char *p)
{
int i=0;
while(*p!=' ')
fname[i ]=*p ;
fname[i]='\0';
i=0;
p ;
while(*p!='\0')
sname[i ]=*p ;
sname[i]='\0';
}

void name::display()
{
cout<<fname<<sname;
}

employee::employee(char n[],char s[],char c[],char p1[],char p2[],int num)
{
changename(n);
strcpy(street,s);
strcpy(city,c);
strcpy(prov,p1);
strcpy(post,p2);
no=num;
}

void employee::changename(char n[])
{
na.changename(n);
}

void employee::display()
{
cout<<post<<"\n\n";
cout<<"\t"<<prov<<city<<street<<"\n\n";
cout<<"\t\t";
na.display();
cout<<"(收)"<<"\n\n";
}

void main()
{
employee obj("王华","中华路15号","武汉市","湖北省","430070",1);
obj.display();
obj.changename("王国强");
obj.display();
}
本程式的执行结果如下:
430070
湖北省武汉市中华路15号
王 华(收)
430070
湖北省武汉市中华路15号
王国强(收)
---------------------------------------------------------

题18.编写一个程式,在已配置好若干个用户名/口令后,通过输入用户名,查找对应的口令,连续执行这一过程直到用户输入结束标记(“end“)为止。
解:
设计一个User类,数据成员有User和pass两个字符数组,存储用户名和口令,另有一个构造函数和getuaer()、getpass()两个成员函数,用于获取用户名和口令。在main()中设计一个对象数组ua,当用户输入一个用户名后,在ua中查找,找到后输出对应的口令,很难找到时输出相应的提示信息。
本题程式如下:
#include<iostream.h>
#include<string.h>
class User
{
char user[10];
char pass[7];
public:
User(char [],char []);
char *getuser();
char *getpass();
};

User::User(char u[],char p[])
{
strcpy(user,u);
strcpy(pass,p);
}

char *User::getuser()
{
return user;
}

char *User::getpass()
{
return pass;
}

void main()
{
User ua[]={User("Li","123456"),User("wang","654321"),
User("Chen","213412"),User("Xu","878616"),
User("Ma","876574"),User("Song","666666")};

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 习题和解析(类和对象-06)

下一篇: C 习题和解析(类和对象-09)