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;
} 展开
#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;
} 展开
4个回答
展开全部
把name=nam;改成 strcpy(name,nam);即可
第二个问题 回复:
const char*cfirst = nam.c_str(); //需要中间转一下
strcpy(name, cfirst);
这是因为c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进行相应的操作转化。
第二个问题 回复:
const char*cfirst = nam.c_str(); //需要中间转一下
strcpy(name, cfirst);
这是因为c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进行相应的操作转化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把name=nam;修改为strcpy( name, nam );就行了。
具体报错原因我也不是很清楚呢,一般不这样给数组赋值~
至于为什么不用string,可能是还没讲到之类的吧?我大学的时候,都没怎么用过string~
具体报错原因我也不是很清楚呢,一般不这样给数组赋值~
至于为什么不用string,可能是还没讲到之类的吧?我大学的时候,都没怎么用过string~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
name=nam;
改为:
strcpy(name,nam);
如果是原版,可以这样改
name=nam;
改为:
strcpy(name,nam.c_str ()) ;
改为:
strcpy(name,nam);
如果是原版,可以这样改
name=nam;
改为:
strcpy(name,nam.c_str ()) ;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//name=nam;
strcpy(name,nam);
将老谭的这一行注释掉。用strcpy 达到拷贝的效果。
老谭太不负责任了。 第一次见拷贝字符串 直接用两个数组变量赋值的。
这又不是指针间的赋值。
strcpy(name,nam);
将老谭的这一行注释掉。用strcpy 达到拷贝的效果。
老谭太不负责任了。 第一次见拷贝字符串 直接用两个数组变量赋值的。
这又不是指针间的赋值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询