《剑指Offer——名企面试官精讲典型编程题》
作者:何海涛
一、书上原题再现
面试题1:赋值运算符函数
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
class CMyString
{
public:
CMyString(char* pData = nullptr);
CMyString(const CMyString& str);
~CMyString(void);
void Print();
private:
char* m_pData;
};
二、涉及的知识点
三、解题过程
赋值:
int a; //声明
a = 10; //赋值
运算符:
+ - * / = % < > ?: 等等
赋值运算符:
=
赋值运算符函数:
What?嗯?
其实,这里涉及到了运算符重载的知识点。我一个遨游在Java大海里的浪子,突然灌一口C/C++的海水,感觉有点生涩。
什么是运算符重载?
简单讲,比如说:
+ 加号的本意是 1+1 = 2 在这里是 累加 的功能
在类似于Java、Python这类高级语言中,当 + 加号 出现在字符串之间比如 "Hello" + "World !",那么这里的加号就会被用来实现 连接两个字符串 的功能。
加号不干 累加 的功能,而是实现了 连接两个字符串 的功能,这就叫做 加法运算符的重载。
运算符重载中有一点要求需要特别注意:重载运算符的参数至少应有一个是类对象(或类对象的引用)
也就是说,参数不能全部是C++的基本类型,以防止用户修改用于基本类型数据成员的运算符的性质,如下面这样是不对的:
int operator + (int a,int b)