当前位置: 首页 > 科技观察

第四篇

时间:2023-03-22 12:59:41 科技观察

适合C语言基础的C++教程在前面的教程中,我们讲述了重载运算符中前++和后++的重载函数的实现,并讲解了在C++中,重载运算符的方法运算符重载极大地方便了程序员编写代码。在下面的描述中,我们会重点关注运算符重载时的一些更详细的内容,包括当重载运算符的返回值为引用和非引用时,代码执行效率的高低,以及实现的方法采用了类中的运算符重载函数。返回值是引用和非引用的区别在上图的类中,添加一些代码,添加一个析构函数和一个拷贝构造函数,代码如下:classPoint{private:intx;inty;public:Point(){cout<<"Point()"<x+p.x;n.y=this->y+p.y;returnn;}}对比上面类外实现的代码,对于重载的运算符+,只有一个形参,另一个添加到它的对象使用这个代替。按照这样的思路,我们继续重写了++之前和++之后的重载运算符函数。改写后的代码如下:classPoint{private:intx;inty;public:/*Pointp(1,2);++p*/Point&operator++(void){cout<<"operator++(void)"<x+=1;this->y+=1;return*this;}/*Pointp(1,2);p++;*/Pointoperator++(inta){cout<<"operator++(inta)"<x+=1;this->y+=1;returnn;}};结合上面的代码,我们再写一次main函数,main函数的代码如下:intmain(intargc,char**argv){Pointp1(1,2);Pointp2(2,3);Pointm;Pointn;cout<<"开始"<age=age;this->name=newchar[strlen(name)+1];strcpy(this->name,name);this->work=newchar[strlen(work)+1];strcpy(this->work,work);}/*复制构造函数*/Person(Person&p){this->age=p.age;this->name=newchar[strlen(p.name)+1];strcpy(this->name,p.name);this->work=newchar[strlen(p.work)+1];strcpy(this->work,p.work);}~Person(){if(this->name)deletethis->name;if(this->work)deletethis->work;}voidPrintInfo(void){cout<<"name="<age=p.age;if(this->name)deletethis->name;if(this->work)deletethis->work;this->name=newchar[strlen(p.name)+1];strcpy(this->name,p.name);this->work=newchar[strlen(p.work)+1];strcpy(this->work,p.work);}这样就避免了上面的情况,我们现在继续写main函数:intmain(intargc,char**argv){Personp1("zhangsan",18,"doctor");cout<<"Personp2=p1"<