请打开考生文件夹下的解决方案文件proj1,此工程中包含了类Pets(“宠物”)和主函数main的定义。程序中位于每个“//ERROR ****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: Name:sonny

admin2020-04-07  19

问题 请打开考生文件夹下的解决方案文件proj1,此工程中包含了类Pets(“宠物”)和主函数main的定义。程序中位于每个“//ERROR ****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:
    Name:sonny Type:dog
    Name:John Type:dog
    Name:Danny Type:cat
    Name:John Type:dog
    注意:只修改每个“//ERROR ****found****”下的那一行,不要改动程序中的其他内容。
    #include<iostream>
    using namespace std;

    enum Pets_type{dog,cat,bird,fish};
    class Pets{
    private:
      char*name;
      Pets_type type;
    public:
      Pets ( const char * name="sonny",Pets_type type=dog);
      Pets& operator=(const Pets&s);
      ~Pets();
      void show()const;
    };
    Pets::Pets(const char * name,Pets_type type)
    //构造函数
    {
      this一>name  =  new  char[strlen(name)+1];
      strcpy(this一>name,name);
    //ERROR  *******found*******
      type=type;
      }
      Pets::~Pets()//析构函数,释放name所指向的字符串
      {
      //ERROR  ******* found *******
      name=’/0 ’;
    }
    Pets& Pets::operator=(constPets& s)
    {
      if(&s==this)//确保不要向自身赋值
        return * this;
      delete[]name;
      name=new char[strlen(s.name)+1];
    //ERROR ******* found *******
        strcpy(this一>name,name);
        type=s.type;
        return*this;
    }
    void Pets::show()const
    {
      cout<<"Name: "<<name<<"Type:";
      switch(type)
      {
        case dog:cout<<"dog";break;
        case cat:cout<<"cat";break;
        case bird:cout<<"bird";break;
        case fish:cout<<"fish";break;
      }
      cout<<endl;
    }
    int main()
    {
      Pets mypet1,mypet2("John",dog);
      Pets youpet("Danny",cat);
      mypet1.show();
      mypet2.show();
      youpet.show();
      youpet=mypet2;
      youpet.show();
      return 0;
    }

选项

答案(1)this一>type=type; (2)delete[]name; (3)strcpy(t.his一>name,s.name);

解析 (1)主要考查考生对构造函数的掌握情况,因为形参名和类的私有成员名称都是type,为了避免混淆,所以规定类的私有成员使用this指针调用,即:this一>type=type;。
    (2)主要考查考生对析构函数的掌握情况,题目中要求,释放name所指向的字符串。要释放name指针用delete语句,即delete[]name;。
    (3)主要考查考生对strcpy函数的掌握情况,strcpy函数的形参为两个字符串,而name为指向字符串的指针,因此使用语句:strcpy(this—>name,s.name);。
转载请注明原文地址:https://kaotiyun.com/show/aw8p777K
0

最新回复(0)