重载操作符号

痴心易碎 提交于 2020-02-15 05:17:36

前几天一同学说去**面试,被问到现场写一个string类出来。

要写出这个类,主要知道几个默认构造函数,这个也是面试中常考的。

第一:拷贝构造函数。string(const string &lhs);

第二:赋值构造函数。string & operator=(const string &lhs)

//这里就有2个问题

第一:赋值构造函数为什么是返回string &//这里是一个引用。

第二,operator=(const string &lhs)这里为啥只有一个参数。

对于第一个问题。我们知道,=(赋值)操作符,在c++语言在的意义是 a=b。

就是b赋值给a。所以,当你构造好这个对象之后,事实上,返回的就是这个对象了,当然是引用了。

第二个问题,为啥只有一个参数呢。

如果operator=操作符是类的成员变量,事实上,他有一个隐藏的函数参数,就是this了。

==============

string.cpp:40: error: `String& operator=(const String&, const String&)' must be a nonstatic member function

//尝试将operator=放到类外面时候,报了这个错。

 1 #include<stdio.h> 2 #include<string.h> 3  class String 4 { 5         String(const char *p = NULL) 6         { 7                 if(NULL != p) 8                 { 9                         int strLen = strlen(p);10                         pStr = new char[strLen + 1];11                         strncpy(pStr,p,sizeof(pStr));12                 }13                 else14                 {15                         pStr = new char[1];16                         pStr[0] = 0;17                 }18         }19         String(const String &rhs)20         {21                 int strLen = strlen(rhs.pStr);22                 pStr = new char[strLen + 1];23                 strncpy(pStr,rhs.pStr,sizeof(pStr));24         }25         String & operator= (const String &rhs)26         {27                 if(this == &rhs)28                         return *this;29                 delete [] pStr;30                 int strLen = strlen(rhs.pStr);31                 pStr = new char[strLen + 1];32                 strncpy(pStr,rhs.pStr,sizeof(pStr));33                 return *this;34         }35         public:36         char *pStr;37 }; 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!