
如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
1 |
class { |
解析
题目考察赋值运算符(=)函数声明,对于
1 |
int a; |
考虑形如 a = 1 ,视 a 为 int 对象则代码改为 a.=(1),其中 = 为方法名, 1 为实参,由此构造出函数声明雏形
1 |
返回值 =(int num); |
因为 printf("%d", a = 1) 输出值为运算结果,故而
1 |
int =(int num); |
由于运算符函数特殊性,函数名加上关键词operator
1 |
int operator=(int num); |
考虑函数仅对实参取值,故参数可常类型(const)引用传递,修改声明
1 |
int operator= (const int& num); |
考虑以下任意一种情况
(a = 1) = 2运行通过说明(a = 1)返回值为可修改的左值即acout << ... << ...中的运算符函数<<可流式编写,说明cout << ...返回值为可修改左值即std::out&
故返回值需引用传递,修改声明
1 |
int& operator= (int& num); |
套用进类 CMyString
1 |
class { |
顺便把定义写了(应该是”深拷贝”赋值)
1 |
CMyString& operator=(const CMyString& str) |
对照书本发现自己还是太嫩了,没有对各个变量进行判断,安全代码
1 |
CMyString& operator=(const CMyString& str) |
然而,事情并没有这么简单……,书中神级代码
1 |
CMyString& operator=(const CMyString& str) |
本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可








近期评论