重载运算符

重载运算符规则

可以重载的运算符:+ - * / % & | ~ ![] () new delate

不能重载的运算符:

.     .*     ::     ?:     sizeof

重载运算符函数可以对运算符作出新的解释,即定义用户所需要的各种操作。但运算符重载后,原有的基本语义不变,包括:

1.不改变运算符的优先级;

2.不改变运算符的结合性;

3.不改变运算符所需要的操作数。

语法形式:

类型 类名::operator op(参数表)

{

            //相对于该类定义的操作

}

其中,“类型”是函数的返回值。“类名”是要重载该运算符的类。“op”表示要重载的运算符。函数名是“operator op”,由关键字operator和重载的运算符op组成。“参数表”列出该运算符所需要的操作数。

用成员函数重载运算符

成员运算符函数的原型在类的内部声明格式如下:

class X

{

    //..

    返回类型operator运算符(形参表);

    //..

}

在类外定义成员运算符函数的格式如下:

返回类型 X:operator运算符(形参表)

{

    函数体

}

用友元函数重载运算符

1.在第一个参数需要隐式转换的情形下,使用友元函数重载

2.友元函数没有this指针,所需操作数都必须在参数表显示

3.c++中不能用友元函数重载的运算符有:   =   ()     []    ->

例:复数运算

#include<iostream>

using namespace std;

class Complex

{

public:

    Complex(double r=0,double i=0){Real=r;Image=i;}

    Complex(int a){Real=a;Image=0;}

    void print()const;

    friend Complex operator+(const Complex & c1,const Complex & c2);

    friend Complex operator-(const Complex & c1,const Complex & c2);

    friend Complex operator-(const Complex & c);

private:

    double Real,Image;

};

Complex operator +(const Complex & c1,const Complex & c2)

{

    double r=c1.Real+c2.Real;

    double i=c1.Image+c2.Image;

    return Complex(r,i);

}

Complex operator-(const Complex &c1,const Complex & c2)

{

    double r=c1.Real-c2.Real;

    double i=c1.Image-c2.Image;

    return Complex(r,i);

}

Complex operator-(const Complex & c)

{

    return Complex(-c.Real,-c.image);

}

void Complex::print()const

{

    cout<<"("<<real<<","<<Image<<")"<<endl;

}

重载赋值运算符

1.赋值运算符重载用于对象数据的复制

2.operator=必须重载为成员函数

3.重载函数的原型为:

    类名 & 类名::operator=(类名);

4.运算符[]和()是二元运算符

5.[]和()只能用成员函数重载,不能用友元函数重载

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

1.istream和ostream是C++的预定义流类

2.cin是istream的对象,cout是ostream的对象

3.运算符<<由ostream重载为插入操作,用于输出基本类型数据

4.运算符>>由istream重载为提取操作,用于输入基本类型数据

5.用友元函数重载<<和>>,输入和输出用户自定义的数据类型

重载输出运算符“<<"(只能被重载为友元函数,不能重载为成员函数)

定义输出运算符”<<"重载函数的一般格式如下:

ostream& operator<<(ostream& out,class name &obj)

{

    out<<obj.item1;

    out<<obj.item2;

    ......

    out<<obj.itemn;

    return out;

}

重载输入函数“>>”(只能被重载为友元函数)

定义输入运算符函数“>>”重载函数的一般格式如下:

istream& operate>>(istream& in,const name &obj)

{

    in>>obj.item1;

    in>>obj.item2;

    .....

    in>>obj.itemn;

    return in;

}

学习感想:通过对重载函数的学习,我感觉对函数调用有了跟深一步的了解,使函数使用更加方便,提高了编程的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值