麻烦改这个构造函数!!

huizai123 2004-04-15 06:58:17
创建一个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();
}


可以运行结果!!但是出现非法操作啊!!!!
是那里错了??麻烦大家改改啊!!!
...全文
103 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jp1984 2004-04-16
  • 打赏
  • 举报
回复
更安全吗??
// 当第三个参数小于或等于第二个参数的字符串长度时不在strncpy的第一个参数中添加null终止符可能造成严重的运行时错误……
bshaozi 2004-04-16
  • 打赏
  • 举报
回复
为了安全起件建议你:
char add[80];
char city[80];
char state[80];
char zip[80];
vcchunhong 2004-04-16
  • 打赏
  • 举报
回复
这位朋友一定是在学钱能的<c++程序设计>
呵~!
这是那本书上的一道练习题~!
我也做过,不过没象你这么复杂~
Wolf0403 2004-04-15
  • 打赏
  • 举报
回复
strncpy 更安全。两个都是 C 标准库的函数。
looksoon 2004-04-15
  • 打赏
  • 举报
回复
由于成员定义的都是字符数组,还是使用strncpy好一些
looksoon 2004-04-15
  • 打赏
  • 举报
回复
strcpy(char*, char*)
strncpy(char*, char*, int)
strncpy要指定所要拷贝的字符个数
huizai123 2004-04-15
  • 打赏
  • 举报
回复
很谢谢你啊!!!!
再次麻烦你!能说说strcpy和strncpy的区别吗??
好象strcpy是C语言的!!
strncpy是C++
oldjackyone 2004-04-15
  • 打赏
  • 举报
回复
你的构造函数改成如下:

employee::employee(char*n,char*a,char *c,char*s,char*z):name(n)//有参构造函数的定义
{

strcpy(add,a);
add[39]='\0';
strcpy(city,c);
city[19]='\0';
strcpy(state,s);
state[19]='\0';
strcpy(zip,z);
zip[9]='\0';

}

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧