java基础改学C++(八)运算符重载
来源:互联网 发布:长江航运能力 知乎 编辑:程序博客网 时间:2024/06/05 11:10
运算符重载就是 定义一个函数,并告诉编译器,遇到这个重载运算符就调用该函数,由这个函数来完成该运算符应该完成的操作,这种函数称为运算符重载函数,它通常是类的成员函数或者是友元函数。运算符的操作数通常也应该是类的对象。因此:
看demo更好理解:
demo 复数类:
class Complex{
private:
float real,virt;
public:
Complex(){real =0; virt =0;}
Complex(float a,float i):real(a),virt(i){}
void display();
Complexoperator+(Complex&);
voidoperator+=(Complex&);
Complexoperator++();//括号里加int,则是后置的++。现在是前置的
};
Complex Complex::operator++(void){
real++;
virt++;
return *this;
}
void Complex::operator+=(Complex&c){
real =real+c.real;
virt =virt+c.virt;
}
Complex Complex::operator+(Complex&c){
Complex com;
com.real =real+c.real;
com.virt =virt+c.virt;
return com;
}
void Complex::display(){
cout<<real<<'\t'<<virt<<endl;
}
int main()
{
Complex c1(10,10);
Complex c2(5,1);
Complex c3 = c1+c2; // 实际上是c3=c1.operator+(c2);函数的实参有1或0个
c3+=c2;
++c3;
c3.display();
}
PS。重载不能改变运算符运算对象(即操作数)的个数,且优先级和结合律不能改变。附:
另外,
重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。即参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。
重载运算符做有缘函数:
还可以是既非类的成员函数也不是友元函数的普通函数:
极少的情况下才使用既不是类的成员函数也不是友元函数的普通函数,原因是普通函数不能直接访问类的私有成员。
如果将运算符重载函数作为成员函数,可以通过this指针自由地访问本类的数据成员,少写一个函数的参数。但必须要求运算表达式第一个参数(即运算符左侧的操作数)是一个类对象,而且与运算符函数的类型相同,必须通过类的对象去调用该类的成员函数,(此段话没意思)但有时候 要求在使用重载运算符时运算符左侧的操作数是整型量(如表达式2+c2, 运算符左侧的操作数是整数),这时是无法利用前面定义的重载运算符的,因为无法调用2.operator+函数。这时就肯定不能作为成员函数了,用非成员,如果涉及类的私有成员,则做friend
C++规定,赋值运算符=、下标运算符[]、函数调用运算符()、成员运算符->必须定义为类的成员函数。
流插入运算符“<<”、流提取运算符“>>”、类型转换运算符不能定义为类的成员函数,只能作为友元函数。
一般将单目运算符和复合运算符重载为成员函数。
一般将双目运算符重载为友元函数。
剩下的以后再说,,,
- java基础改学C++(八)运算符重载
- java基础改学C++(五)数组(1)
- java基础改学C++(六)指针(1)
- java基础改学C++(一)数据类型与表达式
- java基础改学C++(二)输入输出、格式输出
- java基础改学C++(四)预处理
- <C/C++基础> 重载运算符
- 【C++】C++运算符重载-基础
- 从零开始学C++之运算符重载(二):++运算符重载、!运算符重载、赋值运算符重载
- 从零开始学C++之运算符重载(二):++运算符重载、!运算符重载、赋值运算符重载
- 从零开始学C++之运算符重载(二):++运算符重载、!运算符重载、赋值运算符重载
- 运算符重载(c++)
- java基础改学C++(五)数组(2)字符串
- java基础改学C++(六)指针(2)函数的指针、指针的指针
- java基础改学C++(三)函数:内置函数,函数模板,默认参数函数
- java基础改学C++(七)结构体、共用体、枚举、类
- java基础改学C++(七)类的进一步学习
- 基础:运算符重载
- 红黑树与AVL树
- 数据结构(7)之红—黑树
- C++多线程 互斥锁 信号量 事件 临界区
- centos配置hadoop伪分布式环境
- 自定义设置hr的颜色
- java基础改学C++(八)运算符重载
- Python中用print方法向文件中写入内容
- hdu5978(概率思维题)
- 汪国新关公百图精品展在台北国父纪念馆隆重举行
- 数据结构(8)之堆
- Dubbo实战之具体应用
- 关于PScs6无法拖入图片的解决
- Android开发之RecyclerView实现点击事件和长按事件
- InputStreamReader和OutputStreamWriter的用法