C++ 运算符 重载
来源:互联网 发布:淘宝贷款还不起怎么办 编辑:程序博客网 时间:2024/05/24 03:04
期末了啊,大一就要结束了,之前高三复读的同学考了一个好成绩。可能要去我高三的理想学校苏州大学。啊。。。希望我能考研考上苏大把,现在说考研是不是有点早啊。
运算符重载的方法是定义一个重载运算符的函数,所以运算符重载是通过定义函数来实现的。运算符重载实质上是函数的重载。
格式
函数类型 operator 运算符名称(形参表){ 语句 }
operator 是关键字,是专门用于定义重载运算符的函数,例如 operator + 的意思是:对运算符+重载的函数,## 函数名就是 operator + ##
下面对运算符+重载,使之能用于两个复数相加。
class Complex {public: Complex(){real =0;imag =0;} Complex(double x,double y){real =x; imag =y;} Complex operator +(Complex &c2); void display();private: double real; double imag; };Complex Complex::operator +(Complex &c2){return Complex(real+c2.real,imag+c2.real);}
重载的“基本法”
1.不能重载的5个运算符
. (成员访问运算符)
.* (成员指针访问运算符)
:: (域运算符)
sizeof (长度运算符)
?: (条件运算符)
2.重载不能改变运算符的运算对象的个数
3.不能改变优先级
4.不能改变运算符结合性
如=的结合性 从右到左 重载之后还是右到左
5.重载运算符的函数不能有默认的参数
6.重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)
7.用于类对象的运算符一般必须重载,但又两个例外,运算符=和&不必用户重载
1.=可以用于每一个类对象,可以利用他在同类对象中互相赋值。
2.& 地址运算符也不必重载,他能返回类对象在内存中的起始地址。
运算符重载函数作为类成员函数和友元函数
上面的实现复数相加的 operator是作为 成员函数的。
+应该有两个参数,但是在上例代码中只有一个形参表。因为有一个参数是隐含的,运算符函数是通过this指针隐式的访问类对象的成员,可以看到operator+访问了两个对象中的成员,一个是形参c2 另一个就是this指针指向的对象,this->real 就是 c1.real
//友元函数实现+的重载class Complex {public: …… friend Complex operator +(Complex &c1,Complex &c2); //两个参数};Complex operator +(Complex &c1,Complex &c2){……;}
如果将运算符重载函数作为成员函数,他可以通过this指针自由的访问本类的数据成员,因此可以少写一个函数的参数吗,将双目运算符重载为友元函数时,由于友元函数不是该类的成员函数,因此杂志函数的形参列表中必须有两个参数,不能省略
1.C++规定,赋值运算符=,下标运算符[ ],函数调用符() 成员运算符 -> 必须作为成员函数
2。 流插入<<和流提取>> 、类型转换运算符(http://c.biancheng.net/cpp/biancheng/view/222.html)不能定义为类的成员运算符,只能作为友元函数
3.一般将单目运算符和复合运算符(+=,/=之类的)重载为成员函数
4.一般将双目运算符
总结:作为友元函数的:<< >> 和双目运算符以类型转换符
* 作为成员函数有单目运算符和复合运算符、赋值运算符=,下标运算符[ ],函数调用符() 成员运算符 ->*
重载<<和>>
有时候我们需要直接输出一个类对象,所以我们需要对它们重载。
函数形式
istream & operator >>(isream& ,自定义类 &);
ostream & operator >>(osream& ,自定义类 &);
重载运算符>>(<<) 的函数的第一个参数和函数的类型都必须是istream&(ostream&)类型(即istream(ostream)类对象的引用),第二个参数是要进行输入操作的类。因此,只能将重载>>和<<的 函数作为友元函数,而不能将他们定义为成员函数,如果将它们定义为成员函数,那么左侧的运算对象将是我们的类的一个对象,假设输入输出类是某个类的成员,则它们也必须是istrea或ostream类的成员。然而这两个类属于标准库,并且我们无法给标准库的类添加任何成员。
重载<<输出复数
class Complex{
};
public:
……
friend istram &operator<<(ostram&,Complex &);
……
ostream &operator<<(ostram &output,Complex & c)
{
return output;
}
`
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- C#:运算符重载
- [C++]运算符重载
- 【c++】运算符重载
- C++:运算符重载
- C#:运算符重载
- C++:运算符重载
- Stanford NER学习笔记
- 华为上机编程之计算字符串最后一个单词的长度,单词以空格隔开
- 类名.class 类名.this 详解
- C编程(三)流程控制之选择
- 面向对象程序设计
- C++ 运算符 重载
- DAY31继承派生、组合、接口和抽象类
- EA&UML日拱一卒-活动图::CallOperationAction
- java多线程实现服务器端与多客户端之间的通信
- Hash冲突解决——拉链法
- 提高网页加载速度的方法
- Jenkins入门系列之——02第二章 Jenkins安装与配置
- python3 [爬虫入门实战] 爬虫之爬取盘多多文档(百万数据)
- 2017上