栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++运算符重载专题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++运算符重载专题

运算符重载

operator+,operator和+之间没有空格,两者构成了函数名

可以①内部函数重载②外部函数重载,隐式调用(eg:a+b)两者不能同时存在,会出现二义性

显式调用,eg:operator+(a,b)、a.operator(b)

实参中两对象的相对位置,与形参中两者的相对位置相同

可以连加、连减,但会产生匿名对象。eg:c4=c1-c2-c3。c1-c2产生一个匿名对象1,匿名对象1-c3又产生了一个匿名对象2

产生C++匿名对象(临时对象)的三种情况:

1.函数形参的值传递(而不是引用传递)

2.类型转换。

eg1:Person p;

p=18; //两者类型不同,以18为参调用构造函数创建了临时对象,再赋值

eg2:Person p=18; //Person p,为p对象创建了空间,调用构造函数是在此空间内进行的

3.函数需要返回一个对象

运算符重载规则:

1.只能重载C++已有的操作符

2.C++允许重载的运算符(C++中绝大部分运算符都可以)

仅4个不能重载

其中".*",a.*p等价于*(a.p),实际上没人使用,因为不好理解,不如直接用后者的形式去写

class A{

  char* p;

};

第4个是三目运算符

3.重载不能改变运算符操作数的个数

单目运算符1个操作数,双目运算符2个操作数,三目运算符3个操作数

4.运算符优先级不变

5.运算符结合方向不变

6.重载操作符函数,不能有默认参数。

若有默认参数则违背了第3点,有了默认参数2个操作数可以只传1个,而第3点要求,2个操作数的运算符必须传2个参数

7.重载运算符中必须和用户自定义类型对象一起使用,其参数中至少应有一个是类对象或类对象的引用

8."="和"&"不必重载

"=",可使同类对象相互赋值

注:可以重载"="的深拷贝

"&",返回类对象在内存中的起始地址

9.应使重载后的运算符与原始的含义相同

10.运算符重载函数可以是类的成员函数、类的友元函数、全局函数

=========================================================================

双目运算符、单目运算符

++a,可以连加

++++a

a++,不可以连加,会报错

a++++ //err-表达式必须是可修改的左值

故a++,返回的是一个常量

重载后++时,

其返回值类型为const Complex operator++(Complex& c,int) {},返回的是const类型的匿名对象(因为没加引用型)

因为要创建一新对象在复制后用于返回,以及对引用型参数++,故此时不能返回引用型,因为局部变量,在operator++函数调用结束后会被销毁

使用占位符参数int(亚元,用于填坑),重载后++,以和前++的形参列表产生区别

左移、右移运算符重载

cout是ostream类型的对象

cin是istream类型的对象

<<与>>的结合方向是从左到右

cout<

cout<<

cout<<

cout<;

cout;

即不断返回ostream& os的类型ostream&

等价于operator<<(cout,c);

左移运算符,只能写在全局处,不能写在成员中,否则调用的顺序会变反(eg:c<

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号