首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

急问,为什么会覆盖掉以前的数据,多谢了,在线—

2012-03-08 
急问,为什么会覆盖掉以前的数据,谢谢了,在线—#includeiostream.h#includestring.hclassBookCard{publi

急问,为什么会覆盖掉以前的数据,谢谢了,在线—
#include     <iostream.h>
#include     <string.h>
class       BookCard
{
public:
char       *m_sBookName;
char     *m_sLience;
char     *m_sAuthorName;
bool           m_bBorrow;
public:
void   regist(char     *bookName,   char   *lience,char     *authorName);
void   showMe();
};
void   BookCard::regist(char   *bookname,char   *lience,char   *authorname)
{
m_sBookName=bookname;
m_sLience=lience;
m_sAuthorName=authorname;
m_bBorrow=false;
}
void   BookCard::showMe()
{
cout < < "           书名:       " < <m_sBookName;
cout < < "           序列号:       " < <m_sLience;
cout < < "           作者:       " < <m_sAuthorName;
}
void   main()
{
BookCard       bkcList[1000];
     
int     bkcCount=0,   bwcCount=0,   bwrCount=0;
char       service[80];
char     bookname[80],booklience[80],bookauthorname[80];
do
{
cout < < "         br:   " < <endl;      
cin> > service;
        if(strcmp(service, "br ")==0)
{
cout < < "请输入要登记信息: ";
cin> > bookname;
cin> > booklience;
cin> > bookauthorname;
bkcList[bkcCount].regist(bookname,booklience,bookauthorname);
cout < < "你所登记为: " < <endl;
bkcList[bkcCount].showMe();
bkcCount++;
}
}while(strcmp(service, "exit ")!=0);
}




[解决办法]
> bkcList[bkcCount].regist(bookname,booklience,bookauthorname);
这里,传递的3个参数定义请注意。非动态分配。

> void BookCard::regist(char *bookname,char *lience,char *authorname)
> {
> m_sBookName=bookname;
> m_sLience=lience;
> m_sAuthorName=authorname;
> m_bBorrow=false;
> }
这里只是简单把穿过来的字符串地址赋给成员变量。造成所有BookCard的实例的成员变量都指向
> char bookname[80],booklience[80],bookauthorname[80];

修改方法:
void BookCard::regist(char *bookname,char *lience,char *authorname)
m_sBookName=new char[80];
memcpy(m_sBookName, bookname, 80);
......

热点排行