麻烦改这个构造函数!!
创建一个employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮编编号
把表示构造函数changName()、display()的函数原型放在类定义中,构造函数初始每个成员,display()函数把完整对象数据打印出来。其中的数据成员是保护的,函数是公共的!
修改以上的类,将姓名构成类Name,其名和姓在该类中为保护数据成员,其构造函数
为接收一个指向完整姓名字符串的指针,其Display()函数输出姓名.然后将Employee
类中的姓名成员(字符数组)换成Name类对象。
将所有原型化的函数加上成员函数定义,作为类的内部实现文件。
构成完整的类库定义,要求类定义与类成员函数定义分开!!
//name.h
class CName
{
public:
CName(char * n);
void Display();
void ChangeName(char * n);
protected:
char fName[20];
char lName[20];
};
//employee.h
#include "name.h"
class employee
{
public:
employee(char*n,char*a,char *c,char*s,char*z);
void changeName(char *n);
void display();
void set(char*n,char*a,char *c,char*s,char*z);
protected:
CName name;
char add[40];
char city[20];
char state[20];
char zip[10];
};
//name.cpp
#include "name.h"
#include <iostream.h>
void CName::ChangeName(char * n)
{
char * p=n;
int i;
for(i=0;i<19;i++)
{
if(*p == ' ' || *p == '\0')
break;
fName[i]=*p++;
}
fName[i]='\0';
if(*p == '\0')
{
lName[0]='\0';
return;
}
while(*p == ' ') p++;
for(i=0;i<19;i++)
{
if(*p == ' ' || *p == '\0')
break;
lName[i]=*p++;
}
lName[i]='\0';
}
CName::CName(char * n)
{
ChangeName(n);
}
void CName::Display()
{
cout<<fName<<" " <<lName<<endl;
}
//employee
#include <iostream.h>
#include <string.h>
#include "time.h"
employee::employee(char*n,char*a,char *c,char*s,char*z):name(n)//有参构造函数的定义
{
strncpy(add,a,40);
add[39]='\0';
strncpy(city,c,20);
city[19]='\0';
strncpy(state,s,40);
state[19]='\0';
strncpy(zip,z,10);
zip[9]='\0';
}
void employee::display()
{
name.Display();
cout<<add<<endl
<<state<<endl
<<city<<" "<<state<<endl
<<zip<<endl;
}
#include "time.h"
void main()
{
employee a("Liuhui","zhongshan Road 17","haifeng","guangdong","516400");
a.display();
}
可以运行结果!!但是出现非法操作啊!!!!
是那里错了??麻烦大家改改啊!!!