| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1184 人关注过本帖
标题:这道程序神奇了,大大们快来看看!
只看楼主 加入收藏
小编程员
Rank: 1
来 自:广州
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-7-31
结帖率:75%
收藏
已结贴  问题点数:100 回复次数:16 
这道程序神奇了,大大们快来看看!
#include <iostream>
using namespace std;

 //宠物类别:狗、猫、鸟、鱼、爬行动物、昆虫、其他
enum PetType{DOG, CAT, BIRD, FISH, REPTILE, INSECT, OTHER};

class Pet{  //宠物类
  PetType type;    //类别
  char name[20];   //名字
public:
  Pet(PetType type, char name[]){
    this->type=type;
    // 这里有不同
   strcpy(this->name,name);

  }

  PetType getType()const{ return type; }
  const char* getName()const{ return name; }
  const char* getTypeString()const{
    switch(type){
      case DOG: return "a dog";
      case CAT: return "a cat";
      case BIRD: return "a bird";
      case FISH: return "a fish";
      case REPTILE: return "a reptile";
      case INSECT: return "an insect";
    }

    return "an unknown animal";
  }
  void show()const{
    cout<<"There is "<<getTypeString()<<" named "<<name<<endl;
  }
};

int main(){
  Pet a_dog(DOG, "Doggie");
  Pet a_cat(CAT, "Mimi");
  Pet an_animal(OTHER, "Puppy");
  a_dog.show();
  a_cat.show();
  an_animal.show();
  return 0;
}


输出结果为There is a dog named Doggie
          There is a cat named Mimi
          There is an unknown animal named Puppy


但对name数组的赋值进行了小的更该,输出结果变成了type的改变,真是奇怪了,望高手给予解释!
更改如下:


#include <iostream>
using namespace std;

 //宠物类别:狗、猫、鸟、鱼、爬行动物、昆虫、其他
enum PetType{DOG, CAT, BIRD, FISH, REPTILE, INSECT, OTHER};

class Pet{  //宠物类
  PetType type;    //类别
  char name[20];   //名字
public:
  Pet(PetType type, char name[]){
    this->type=type;
    // 这里有不同
   for(int i=0;i<=20;i++)this->name[i]=name[i];

  }

  PetType getType()const{ return type; }
  const char* getName()const{ return name; }
  const char* getTypeString()const{
    switch(type){
      case DOG: return "a dog";
      case CAT: return "a cat";
      case BIRD: return "a bird";
      case FISH: return "a fish";
      case REPTILE: return "a reptile";
      case INSECT: return "an insect";
    }

    return "an unknown animal";
  }
  void show()const{
    cout<<"There is "<<getTypeString()<<" named "<<name<<endl;
  }
};

int main(){
  Pet a_dog(DOG, "Doggie");
  Pet a_cat(CAT, "Mimi");
  Pet an_animal(OTHER, "Puppy");
  a_dog.show();
  a_cat.show();
  an_animal.show();
  return 0;
}

输出结果就变为了There is unknown animal named Doggie
          There is unknown animal named Mimi
          There is an unknown animal named Puppy

好像switch(type)函数根本没有运行一样,求教高手!
搜索更多相关主题的帖子: 1234 
2009-08-26 23:29
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:23 
不觉得有什么神奇的,构造函数里形参和类私有数据名字一样,不出错才怪,程序格式看着也很难过.
#include <iostream>
using namespace std;

//宠物类别:狗、猫、鸟、鱼、爬行动物、昆虫、其他
enum PetType{DOG, CAT, BIRD, FISH, REPTILE, INSECT, OTHER};

class Pet
{  //宠物类
  PetType type;    //类别
  char name[20];   //名字
public:
  Pet(PetType type1, char name1[])
  {
    type=type1;
    for(int i=0;i<20;i++)
        name[i]=name1[i];
  }

  PetType getType()const{ return type; }
  const char* getName()const{ return name; }
  
  const char* getTypeString()const
  {
    switch(type)
    {
      case DOG: return "a dog";
      case CAT: return "a cat";
      case BIRD: return "a bird";
      case FISH: return "a fish";
      case REPTILE: return "a reptile";
      case INSECT: return "an insect";
    }

    return "an unknown animal";
  }
  void show()const{
    cout<<"There is "<<getTypeString()<<" named "<<name<<endl;
  }
};

int main(){
  Pet a_dog(DOG, "Doggie");
  Pet a_cat(CAT, "Mimi");
  Pet an_animal(OTHER, "Puppy");
  a_dog.show();
  a_cat.show();
  an_animal.show();
  return 0;
}
2009-08-27 00:18
newCpp
Rank: 5Rank: 5
来 自:火星
等 级:职业侠客
威 望:3
帖 子:256
专家分:375
注 册:2009-8-17
收藏
得分:23 
学习顶一下下

编程语言视频教程在线播放学习
2009-08-27 06:57
宽心面
Rank: 2
等 级:论坛游民
帖 子:10
专家分:33
注 册:2009-8-27
收藏
得分:23 
2楼有点所答非所问丫。。。。我也很想知道问题的答案,期待有高手来解答。。。
2009-08-27 18:42
宽心面
Rank: 2
等 级:论坛游民
帖 子:10
专家分:33
注 册:2009-8-27
收藏
得分:0 
其实参数与类的私有数据名称一样,不会导致错误的,用this指针就解决了~!

2楼的编码我跑了一遍,关键在于for循环里面的条件有没有等号~~我也不知道为什么没有等号就能成功,而有等号就不成功了。。希望高手快来解答!
2009-08-29 13:24
宽心面
Rank: 2
等 级:论坛游民
帖 子:10
专家分:33
注 册:2009-8-27
收藏
得分:0 
其实参数与类的私有数据名称一样,不会导致错误的,用this指针就解决了~!

2楼的编码我跑了一遍,关键在于for循环里面的条件有没有等号~~我也不知道为什么没有等号就能成功,而有等号就不成功了。。希望高手快来解答!
2009-08-29 13:25
black423
Rank: 2
等 级:论坛游民
帖 子:36
专家分:65
注 册:2009-8-10
收藏
得分:0 
好神奇!
2009-08-29 14:35
black423
Rank: 2
等 级:论坛游民
帖 子:36
专家分:65
注 册:2009-8-10
收藏
得分:0 
好神奇!
2009-08-29 14:35
newCpp
Rank: 5Rank: 5
来 自:火星
等 级:职业侠客
威 望:3
帖 子:256
专家分:375
注 册:2009-8-17
收藏
得分:0 
没有看明白
我晕

编程语言视频教程在线播放学习
2009-08-29 16:04
newCpp
Rank: 5Rank: 5
来 自:火星
等 级:职业侠客
威 望:3
帖 子:256
专家分:375
注 册:2009-8-17
收藏
得分:0 
没有看明白
我晕

编程语言视频教程在线播放学习
2009-08-29 16:04
快速回复:这道程序神奇了,大大们快来看看!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014166 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved