我叫淳子 发表于 2016-4-15 21:04:33

修改Copy函数改错怎么改啊。

#include <iostream>
#include <cstring>
using std::cout;
using std::endl;
class Person{
      char *name;int id;
public:
      Person(const char* pn="noName", int i = 0){
         name=new char;
         if(name!=0)strcpy(name,pn);
         id = i;
      }
      ~Person(){
         cout<<"Destruct "<<name<<endl;
         delete [] name;
      }
      void print(){
         cout<<name<<" : "<<id<<'\n';
      }
      void copy(Person const &rp){
         delete [] name;
         name=new char;
         if(name!=0)strcpy(name,rp.name);
         id = rp.id;
      }
};
int main(){
      Person p1("Randy", 1),p2;
      p2.copy(p1).print();//这两行我是真的没懂
      p2.copy(p2).print();
}



LeoChou 发表于 2016-4-16 11:28:29

如果p2.copy(p1)的返回值是一个Person类,p2.copy(p1).print()是可以的;因为copy函数的返回值为void,所以不能这么调用print。

我叫淳子 发表于 2016-4-17 12:32:53

LeoChou 发表于 2016-4-16 11:28
如果p2.copy(p1)的返回值是一个Person类,p2.copy(p1).print()是可以的;因为copy函数的返回值为void,所以 ...

所以我要怎么修改?谢谢大神

LeoChou 发表于 2016-4-18 08:35:35

对C++只是略知皮毛,C了解的深一点。可以将将p2.copy(p1).print();分开写:p2.copy();p2.print();或者将copy函数的返回值改为Person类。Person copy(...){...... return (*this);}

我叫淳子 发表于 2016-4-18 10:52:07

LeoChou 发表于 2016-4-18 08:35
对C++只是略知皮毛,C了解的深一点。可以将将p2.copy(p1).print();分开写:p2.copy();p2.print();或者将copy ...

谢谢,两种方法我都试过,哈哈,第一种好像会出问题,然后第二种我不懂返回值是什么,所以一直出错。原来要return *this啊,谢谢大神。
页: [1]
查看完整版本: 修改Copy函数改错怎么改啊。