c++ 赋值运算符
来源:互联网 发布:美国文献数据库 编辑:程序博客网 时间:2024/05/22 11:47
1. 作用
赋值运算符"="的作用是将一个表达式的值赋给一个左值。
2. 一般形式
A&A::operaton=(A &a)
{
if(this == &a) //自检查
return *this;
...... //将a的成员赋给自己
return *this;
}
特别需要注意的是如果A是一个派生类,则在赋值成员前需要调用基类的赋值函数:base::operator=(rhs);
3. 返回引用的原因
因为赋值运算符会改变左值,所以赋值运算符重载要返回引用以用于类似(a = b) = c;这样连续赋值的情形。
4. 重载时只能作为成员函数
赋值运算符重载时只能是成员函数,如果允许operator=为全局的,那么将会导致重新定义内置的"=":
int operator=(int , MyType); //即将非int赋给int变量
这种做法是不允许的,编译器通过强制operator=为成员函数来避开这个问题。当创建一个operator=时,必须从右侧对象中拷贝所以需要的信息到当前对象。
5. 需要自检查的原因
String& String::operate=(const String &other)
{
if(this==&other)
return *this;
delete []m_data;
int length=strlen(other.m_data);
m_data=new char[lenght+1];
strcpy(m.data,other.m_data);
return *this;
}
对应上面的code,如果没有做自检查,那么首先会去释放原来的内存资源,在拷贝,这样显然是错误的。
有些情况不做自检查也是可以的,但最好还是加上(这样做不会带来麻烦, 最起码省去了给成员赋值的操作,对性能可能会有一点提升)
- C++:赋值运算符重载
- C语言赋值运算符
- 【C++】赋值运算符函数
- 重载赋值运算符(c/c++)
- C语言的赋值运算符
- 重载赋值运算符(c++)
- c语言:赋值运算符与赋值表达式
- C语言之使用关系运算符、赋值运算符
- C语言基础学习运算符-赋值运算符
- 赋值运算符重载函数[C/C++/C#]
- C语言运算优先级 简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
- Objective-C表达式-Objective-C 赋值运算符
- [C++] 构造/析构/赋值运算
- Java运算赋值运算符
- [C++]拷贝构造函数和赋值运算符重载
- C++:类的复制构造函数、赋值运算符
- 对C语言中赋值运算符的理解
- C++primer学习笔记-----4.4赋值运算符
- 图片上传到数据库中去
- 在eclipse 中 导入OpenCms源码及其远程调试
- MFC内存泄漏跟踪
- 表压缩与索引失效
- BZOJ 刷题记录 PART 4
- c++ 赋值运算符
- ORACLE重建索引需要考虑问题
- LeetCode 34. Search Insert Position
- ubuntu下安装java
- 【转帖】Linux下安装GIT
- ubunt下的mysql安装
- ubuntu下的tomcat安装
- centos 安装五笔输入法
- XAML —— 命名空间