鱼C论坛

 找回密码
 立即注册
查看: 1465|回复: 4

刚入手C++,写一个Dog类的时候出现的问题,附图片和代码。

[复制链接]
发表于 2015-4-11 21:21:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;

  4. class Dog
  5. {
  6. public:
  7.                 Dog();//构造函数
  8.                 Dog(char Nname[20],int Nage,char Nsex,float Nweight,char Ncolor[10]);//有参的构造函数
  9.                 Dog(Dog &p);//拷贝函数
  10.                 void SetName();
  11.                 void SetSex();
  12.                 void SetColor();
  13.                 void SetWeight();
  14.                 void Talk();
  15.                 ~Dog() {} ;//析构函数
  16. private:
  17.                 char name[20];
  18.                 int age;
  19.                 char sex;
  20.                 float weight;
  21.                 char color[10];
  22. };

  23. Dog::Dog()
  24. {

  25. }

  26. Dog::Dog(char *Nname,int Nage,char Nsex,float Nweight,char *Ncolor)
  27. {
  28.         strcpy(name,Nname);//在C++中,给一个数组赋值字符串的时候,只能用strcpy;不能用这种形式:name=Nname
  29.         //&name=Nname;     //因为数组首地址不可以改变. 还有&name=Nname,&只是"取"这个数组的首地址.
  30.         age=Nage;
  31.         sex=Nsex;
  32.         weight=Nweight;
  33.         strcpy(name,Ncolor);
  34.         //color=Ncolor;
  35. }

  36. void Dog::SetName()
  37. {
  38.         gets(name);
  39. }

  40. void Dog::SetSex()
  41. {
  42.         cin>>sex;
  43. }

  44. void Dog::SetColor()
  45. {
  46.         gets(color);
  47. }

  48. void Dog::SetWeight()
  49. {
  50.         cin>>weight;
  51. }

  52. void Dog::Talk()
  53. {
  54.         cout<<"你好,主人.我的基本信息是:";
  55.         cout<<"\t狗名:"<<name<<"\t性别:"<<sex<<"\t体重:"<<weight<<"\t颜色:"<<color<<endl;
  56. }


  57. main()
  58. {
  59.         Dog d1,d2,d3;
  60.         d1=Dog("xiao1" , 2 , 'm' , 5  , "red" );
  61.         d2=Dog("xiao2" , 1 , 'f' , 2  , "yellow");
  62.         d3=Dog("xiao3" , 3 , 'm' , 10 , "blue");
  63.         cout<<"这是一个可以模拟创建小狗狗的程序:\n"<<endl;
  64.         cout<<"以下为系统已经给出的3种可爱小狗狗:\n"<<endl;
  65.         d1.Talk();
  66.         d2.Talk();
  67.         d3.Talk();

  68.         return 0;
  69. }
复制代码

这是代码,但是在调用Talk的时候,狗的姓名输不出来,不知道为什么。
QQ截图20150411212036.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-4-12 01:48:52 | 显示全部楼层
37行中 strcpy(name,Ncolor);name应该改为color,即可以运行成功
另外,mian函数返回值类型加个int
d1=Dog("xiao1" , 2 , 'm' , 5  , "red" );是个等号操作,如果没有定义operator=函数,则调用编译器默认的=操作,是个浅拷贝
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-12 11:43:14 | 显示全部楼层
Victory_6226 发表于 2015-4-12 01:48
37行中 strcpy(name,Ncolor);name应该改为color,即可以运行成功
另外,mian函数返回值类型加个int
d1=D ...

谢谢,得到完美解决,不过,深拷贝和浅拷贝,什么意思呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-12 12:07:50 | 显示全部楼层
Victory_6226 发表于 2015-4-12 01:48
37行中 strcpy(name,Ncolor);name应该改为color,即可以运行成功
另外,mian函数返回值类型加个int
d1=D ...

谢谢,已经百度查询过了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-12 12:42:13 | 显示全部楼层
捧场~以后学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-19 16:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表