C++期末复习(二)运算符的重载

本文介绍了C++中运算符重载的概念,包括如何通过成员函数和友元函数实现复数的加法操作。同时,讨论了前置和后置自增运算符的重载,并展示了流插入和流提取运算符的友元函数实现。此外,还提到了字符串比较和转换构造函数的相关内容。
摘要由CSDN通过智能技术生成

来啦,来啦,它又来啦,咳咳,某人好像不守信用了哈...emmm ,谁都有的嘛,下次,绝对不会了(希望是真的hhh)

第十章   运算符的重载

函数实现两个复数相加的

complex complex::add(complex&c)

{

complex c2;

c2.real=real+c.real;

c2.image=image+c.image;

return c2;

}

引用方式

c3=c1.add(c2);

用运算符重载实现两个复数相加

complex complex+(complex&c1)

{

Complex c3;

C3.real=real+c1.real;

C3.image=image+c1.image;

Return c3;}//不建立对象也可以

这里要提醒的是成员函数的内置有个变量!

且运算式的第一个是参数且与类的类型相同

引用方式

C3=c1+c2;   c1.operator+(c2)

3  规则

已有

不能 * . :: sizeof  ?:

优先级 ,个数,结合性,不能默认参数,至少有类对象,=,,&

不能重载

类似于标准数据类型的功能

成员函数或者友元或者两者都不是

4 复数相加函数作为友元函数来实现

Friend complex operator+(complex&c1,complex&c2)

{

Return complex(c1.real+c2.real,c1.image+c2.image)};

注意友元要用两个参数来实现

5复数和整数相加,通过成员函数来实现

Complex complex::operator+(int &i)

{

Return (real+i,image)}

但是只适用于左边为复数右边为整型的情况

如果是友元

Friend complex operator+(int&i,complex %c)

{

Return complex(i+c.real,image)}//要求数据类型对应就行了,不要求第一个一定是类的数据类型

6 必须双目运算符

流插入,流提取

7 必须单目运算符

赋值 下标 函数调用

8 字符串数值比较函数,运算符的重载

声明

 friend bool operator >(string &c1,string&c2);

定义

bool operator > (string &c1,string &c2)

{

if(strcmp(c1.p,c2.p)>0)//注意这里的数据引用

return true ;

else

return false;

}

要是三个函数的重载时,数据判断的结果不同而已,其他都相同

如果要进行程序的完善的话,添加一个比较函数

Void compare (string& c1,string&c2)

{

对重载后的运算符进行使用

If(operator>(c1,c2)==1)

怎么...

}

9重载自增运算符

前置++和后置++

#include <iostream>

using namespace std;

class time

{

private:

int minute;

int sec;

public:

time(){

minute=0;

sec=0;

}

time(int a,int b)

{

minute=a;

sec=b;

}

void display()

{

cout<<minute<<" " <<sec<<endl;

}

time operator++();//定义重载函数

time operator++(int);//定义重载函数   后置

}

time time::operator++()

{

if(++sec>=60)

{

sec-=60;

minute++;

}

return *this;//返回当前对象值

 }

 time time::operator++(int)

 {

  time t(*this);//建立一个临时对象保存当前的值

 sec++;

 if(sec++>=60)

 {

  sec-=60;

  minute++;

 }//同样的操作

 return temp;返回自加前的对象

 }

 。。。

9 重载流插入和流提取运算符

只能重载为友元函数或者普通函数,不能定义为成员函数

Eg:输出复数

ostream&operator<<(ostream&output,complex&c)

{

output<<c.real<<c.image<<endl;

Return  output;

}

这个程序有个bug就是复数的虚部为负数时输出会有错误,要进行程序的修改!!!

Cout<<c3相当于 operator<<(cout,c3),即cout 为output的引用,c3为c的引用

输入复数

istream&operator<<(istream&output,complex&c)

{

input<<c.real<<c.image;

Return  input;

}

10 转换构造函数

将其他对象转换成类的对象,只能有一个参数

Complex(double r)  {real=r,image=0}

Eg complex(2.3);

类型转换函数

类-另一个数据类型

Operator 类型名

{转换语句}

Operator  double()

{

Return real;

}

系统需要时会自动调用这些函数建立一个无名的对象

,先找有没有运算符重载,然后再考虑要不要类型转换的事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值