C++程序设计 谭浩强的这道例题有错?04年六月第一版,P273(例9.5包含构造函数和析构函数的C++程序)

#include<string>#include<iostream>usingnamespacestd;classStudent{public:Student(intn,... #include <string>
#include <iostream>
using namespace std;
class Student
{
public:
Student(int n,char nam[10],char s)
{
num=n;
name=nam;
sex=s;
cout<<"constructor called."<<endl;
}
~Student()
{
cout<<"destructor called."<<endl;
}

void display()
{
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
}
private:
int num;
char name[10];
char sex;
};

int main()
{
Student stud1(10010,"Wang_li",'f');
stud1.display();
Student stud2(10011,"Zhang_fun",'m');
stud2.display();
return 0;
}

我知道,如果把char name[10]改为string name就可以编译通过,但问题是,老谭用char name[10]是为了什么?
如果按照老谭的方法,name用char型,怎么修改呢?
感谢大家的热心解答,上面那个把name=nam改为:strcpy(name,nam)就成功,
输入错了,以下才是老谭的原版,那个原题是string nam,下面的版本应该怎么改呢?非常感谢!!
#include <string>
#include <iostream>
using namespace std;
class Student
{
public:
Student(int n,string nam,char s)
{
num=n;
name=nam;
sex=s;
cout<<"constructor called."<<endl;
}
~Student()
{
cout<<"destructor called."<<endl;
}

void display()
{
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
}
private:
int num;
char name[10];
char sex;
};

int main()
{
Student stud1(10010,"Wang_li",'f');
stud1.display();
Student stud2(10011,"Zhang_fun",'m');
stud2.display();
return 0;
}
展开
 我来答
chengrenbo
2011-01-06 · TA获得超过524个赞
知道小有建树答主
回答量:402
采纳率:0%
帮助的人:633万
展开全部
把name=nam;改成 strcpy(name,nam);即可

第二个问题 回复:
const char*cfirst = nam.c_str(); //需要中间转一下
strcpy(name, cfirst);
这是因为c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进行相应的操作转化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小兔儿爹
2011-01-06 · 超过21用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:46.6万
展开全部
把name=nam;修改为strcpy( name, nam );就行了。
具体报错原因我也不是很清楚呢,一般不这样给数组赋值~
至于为什么不用string,可能是还没讲到之类的吧?我大学的时候,都没怎么用过string~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
2011-01-06 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4452万
展开全部
name=nam;
改为:
strcpy(name,nam);

如果是原版,可以这样改
name=nam;
改为:
strcpy(name,nam.c_str ()) ;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
regret4hxp2
2011-01-06 · TA获得超过682个赞
知道小有建树答主
回答量:479
采纳率:100%
帮助的人:241万
展开全部
//name=nam;
strcpy(name,nam);
将老谭的这一行注释掉。用strcpy 达到拷贝的效果。
老谭太不负责任了。 第一次见拷贝字符串 直接用两个数组变量赋值的。
这又不是指针间的赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式