【笔记-C++】 运算符重载
2017-12-17 18:08
197 查看
运算符重载(一种特殊的函数)
双目运算符重载:
对象1 运算符 对象2
类内重载:
void operator+(对象2){.......}
void为返回值类型,可任意
+为要重载的运算符,相当于函数名
在类内重载可以少写第一个参数,因为类内有this指针(this指针指向当前对象1)
对象1必须是类,对象2类型任意
全局区重载:
void operator+(对象1,对象2){...........}
运算符重载后,即可用运算符对类进行运算,一般重载尽量定义在类内
输入输出重载只能在类外,不能打开输入输出类
istream& operator>>(istream&is, A &a){
return is>>a.x或者return cin>>a.x
}
is等价于cin,可任意名
A &a 不能加const,输入是做改变,&a引用a,因为相当于在函数中改变外部的值
istream& 返回输入流,即返回的值后面可以用流的语法。
ostream& operator<<(ostream& os, const A &a){..........}
与双目运算符重载类似,只是少了一个对象2
++,--重载时默认为前++、--:
类内定义: void operator++(){.............}
使用哑元int可变为后++、--
void operator++(int){............}
类内定义: int operator()(A a1, A a2){
return a1*x+a2*x;
}
2)重载为强制类型转换
不写返回值类型
类内定义: operator int() {return i;}
使用时: (int)a a为对象
=, []
“=”重载时注意自赋值:
if(this==&a) return *this;
可以重载new,delete,重载时至少有一个类类型
void* operator new(size_t t){............}
void operator delete(void *p){...........}
*,->希望按照指针方式操作
*返回对象,->返回地址
A& operator*(){return *p;}
A* operator->(){return p;} 迭代器用
注意:(*p).m “.”优先级高
不能发明新的运算符
不能被重载的运算符:
::
.
sizeof
.* 到成员的指针
? : 三目运算符
typeid 类型识别
双目运算符重载:
对象1 运算符 对象2
类内重载:
void operator+(对象2){.......}
void为返回值类型,可任意
+为要重载的运算符,相当于函数名
在类内重载可以少写第一个参数,因为类内有this指针(this指针指向当前对象1)
对象1必须是类,对象2类型任意
全局区重载:
void operator+(对象1,对象2){...........}
运算符重载后,即可用运算符对类进行运算,一般重载尽量定义在类内
输入输出重载只能在类外,不能打开输入输出类
istream& operator>>(istream&is, A &a){
return is>>a.x或者return cin>>a.x
}
is等价于cin,可任意名
A &a 不能加const,输入是做改变,&a引用a,因为相当于在函数中改变外部的值
istream& 返回输入流,即返回的值后面可以用流的语法。
ostream& operator<<(ostream& os, const A &a){..........}
单目运算符重载
运算符 对象1 -, !, ~, ++, --与双目运算符重载类似,只是少了一个对象2
++,--重载时默认为前++、--:
类内定义: void operator++(){.............}
使用哑元int可变为后++、--
void operator++(int){............}
‘()’运算符重载
1)可以有多个参数类内定义: int operator()(A a1, A a2){
return a1*x+a2*x;
}
2)重载为强制类型转换
不写返回值类型
类内定义: operator int() {return i;}
使用时: (int)a a为对象
特殊重载
有些运算符只能重载为类内的成员形式:=, []
“=”重载时注意自赋值:
if(this==&a) return *this;
可以重载new,delete,重载时至少有一个类类型
void* operator new(size_t t){............}
void operator delete(void *p){...........}
*,->希望按照指针方式操作
*返回对象,->返回地址
A& operator*(){return *p;}
A* operator->(){return p;} 迭代器用
注意:(*p).m “.”优先级高
不能进行的重载
不能对基本类型数据进行重载不能发明新的运算符
不能被重载的运算符:
::
.
sizeof
.* 到成员的指针
? : 三目运算符
typeid 类型识别
相关文章推荐
- c++学习笔记 运算符重载
- C++学习笔记9-运算符重载
- 【C++】学习笔记五十一——运算符重载
- c++学习笔记5:运算符重载、友元和类的类型转换
- C++学习笔记之运算符重载
- C++学习笔记(运算符重载)
- C++ FAQ学习笔记 13 章 运算符重载
- 【C++】学习笔记草稿版13(运算符重载提高篇)
- c++学习笔记--由复数类看运算符重载
- C++学习笔记之运算符重载例子
- 【菜鸟C++学习笔记】26.运算符重载
- C++学习笔记之运算符重载
- c++学习笔记(十):运算符重载综合——自定义数组类
- 【C++】【学习笔记】【025-027】运算符重载
- c++学习笔记(三):深拷贝与浅拷贝及等号运算符重载
- C++学习笔记4--静态属性 静态方法 虚方法 抽象方法 多态性 析构函数 运算符重载 多继承 虚继承
- C++学习笔记(十)运算符重载
- c++学习笔记--带有动态空间申请的类成员变量的类的运算符重载
- C++学习笔记——运算符重载
- 【C++学习笔记】优先级队列以及运算符重载