免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1538 | 回复: 7
打印 上一主题 下一主题

程序不能输出 type [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-09 12:31 |只看该作者 |倒序浏览
  1. #include <iostream>
  2. #include<cstring>
  3. using namespace std;
  4. enum Petstype {dog,cat,bird,fish};
  5. class Pets
  6. {
  7. private:
  8.         char *name;
  9.         Petstype type;
  10. public:
  11.         Pets(const char *name ="sonny",Petstype type=dog);
  12.         Pets& operator =(const Pets &s);
  13.         ~Pets();
  14.         void show() const;
  15. };
  16. Pets::Pets(const char *name,Petstype)
  17. {
  18.         this->name=new char[strlen(name)+1];
  19.         strcpy(this->name,name);
  20.         this->type=type;
  21. }
  22. Pets::~Pets()
  23. {
  24.         delete[]name;
  25. }
  26. Pets& Pets::operator =(const Pets &s)
  27. {
  28.         if(&s==this) return *this;
  29.         delete []name;
  30.         name =new char[strlen(s.name)+1];
  31.         strcpy(name,s.name);
  32.                 type=s.type;
  33.         return *this;
  34. }
  35. void Pets::show() const
  36. {
  37.         cout<<"Name:"<<name<<"    type:";
  38.         switch(type)
  39.         {
  40.         case dog:
  41.                 cout<<"dog";
  42.                 break;
  43.         case cat:
  44.                 cout<<"cat";
  45.                 break;
  46.         case bird:
  47.                 cout<<"bird";
  48.                 break;
  49.         case fish:
  50.                 cout<<"fish";
  51.                 break;
  52.         }
  53.         cout<<endl;
  54. }
  55. int main()
  56. {
  57.         Pets mypet1,mypet2("john",dog);
  58.         Pets youpet("Danny",cat);
  59.         mypet1.show();
  60.         mypet2.show();
  61.         youpet.show();
  62.         youpet=mypet2;
  63.         youpet.show();
  64.         return 0;
  65. }
复制代码

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
2 [报告]
发表于 2011-03-09 13:06 |只看该作者
  1. Pets::Pets(const char *name,Petstype type)
复制代码

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
3 [报告]
发表于 2011-03-09 13:06 |只看该作者
你可以gdb一下.....都不debug 的

论坛徽章:
0
4 [报告]
发表于 2011-03-09 13:26 |只看该作者
回复 3# egmkang


    感谢!!!
太马虎了

论坛徽章:
0
5 [报告]
发表于 2011-03-09 13:29 |只看该作者
line 16: Pets:ets(const char *name,Petstype) 改为 Pets:ets(const char *name,Petstype type)

因为你没打形参名,所以line 20: this->type=type;中的两个type其实都是this->type.自我赋值.又因为你没有使用形参初始化列表且对象都是定义在局部的,所以this->type的值是不定的,所以就杯具了.

论坛徽章:
0
6 [报告]
发表于 2011-03-09 13:39 |只看该作者
回复 5# liwangli1983


    原来是这样啊

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
7 [报告]
发表于 2011-03-09 14:30 |只看该作者
本帖最后由 egmkang 于 2011-03-09 14:39 编辑

其实本来你有能力挽救这个错误的
你函数参数名不要和类成员名起的一样,这样直接就编译不过去
比如说你类成员是type,函数参数叫_type,直接就编译不过,this也不要.

论坛徽章:
0
8 [报告]
发表于 2011-03-09 15:25 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP