9-操作符重载
来源:互联网 发布:在线表单与数据库设计 编辑:程序博客网 时间:2024/05/20 22:03
一.运算符重载---为运算符提供不同的语义
struct Complex{int a;int b;};Complex c1={1,2};Complex c2={4,5};
如果想对c1,c2直接相加c1+c2,C语言中直接的方法就是用函数实现。
C++中用运算符重载来实现c1+c2;
C++中运算符重载的本质:
*: C++中通过operator关键字扩展操作符
*: operator的本质是通过函数重载实现操作的
Complex operator+ (const Complex& c1,const Complex& c2){<span></span>Complex ret={0,0};ret.a =c1.a+c2.a;ret.b =c1.b+c2.b;return ret;}
二.C++中的友元
*:private 声明使得类的成员不能被外界访问
*:通过 friend 关键字可以获得类外访问类的权限
(1)<<重载左移操作符
ostream operator<<(ostream& out,const Complex& c){out<<c.a<<"+"<<c.b<<"i";return out;}
(2)operator+ 的成员函数重载
Complex Complex::operator+ (const Complex& c){Complex ret;ret.a = a+c.a;ret.b = b+c.b;return ret;}
使用成员函数重载:
*:相比使用全局函数重载操作符(friend),少一个参数,
*:不需要使用friend关键字
如何选择使用全局函数重载和成员函数重载操作符
*:当无法修改作参数的类时,使用全局函数进行重载
如:friend ostream operator<<(ostream out,const Complex& c);
*;=,[],-> 操作符只能通过成员函数进行重载。
(3)[] 的重载
int& Array::operator[](int i){ return mSpace[i];}
(4)= 的重载
Array& Array::operator= (const Array& obj){delete[] _space;_length = obj._length;_space = new int[_length];for(int i=0;i<_length;++i)_space[i] = obj._space[i];return *this;}
(5)== 的重载
bool Array::operator==(const Array& obj)
注意:
(1) C++编译器会为每个类提供默认的赋值操作符
(2)默认的赋值操作符只是简单的值复制
(3)当类中存在指针成员变量时(如字符串类)时,就需要重载赋值操作符
四.++操作符的重载
(1)++操作符只有一个参数
(2)++ 操作符有前缀和后缀之分
解决方案:
C++中通过一个占位参数来区分前缀操作符和后缀操作符的重载
(1) obj++ 的重载
Complex operator++(int ) // obj++{ /// int 的意义主要区分前缀和后缀 Complex ret = *this;a++;b++;return ret;}
(2)++obj 的重载
Complex operator++() // ++obj{++a;++b;return *this;}
小结:
(1) 操作符重载的本质是函数重载,扩展操作符的语义
(2)friend 关键字可以使全局函数访问类,开发类的访问权限
(3)=,[],-> 操作符只能通过成员函数进行重载
(4) ++ 操作符通过一个int 参数进行区分前缀与后缀的重载
- 9-操作符重载
- C++学习笔记9-操作符重载
- c++重载操作符
- C++ 操作符重载
- 操作符重载浅析
- 操作符重载
- 10.8 操作符重载
- 操作符重载
- 操作符重载手册
- C#操作符重载
- 操作符重载手册
- 操作符重载手册
- 六操作符重载
- 操作符的重载
- C#操作符重载
- 多态,操作符重载
- 操作符重载集锦
- 重载操作符
- 按时可达上课了大事了的撒了解
- POJ 1815 (最小割的点集)
- 黑马程序员--IO流之其他
- 获取父类的泛型类型
- 求字符串中出现次数最多的字符及其出现次数
- 9-操作符重载
- hdu1080
- C++ STL源码剖析
- C/C++ 常用输入
- django url调度
- Atitit.实现继承的原理and方法java javascript .net c# php ...
- 在一个页面两个DropDownList绑定同一个数据源
- stl_config.h
- hdu 4412 Sky Soldiers(区间DP)