C++重载运算符(1)

运算符重载:

(1)运算符重载的实质是函数重载;
(2)可以重载为普通函数,也可重载为成员函数
必要性
C++中预定义的运算符的操作对象只能是基本的数据类型。对于许多用户自定义类型,也需要类似的运算操作。则必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。
运算类型
一元运算:成员函数有无参数;友元函数有一个参数。
二元运算:成员函数有一个参数;友元函数有两个参数。
重载类型
(1)用成员函数重载
(2)用友元函数重载

(1)成员函数与友元函数重载

#include <iostream>
using namespace std;
class Complex{
    public:
    Complex(double r=0.0,double i=0.0)//构造函数
    {real=r;imag=i;}
    void display(){
        cout<<"("<<real<<","<<imag<<")"<<endl;}
    Complex Cadd(Complex &c1){
        Complex c;
        c.real=c1.real;c.imag=c1.imag;
        return c;}
    Complex Crev(){
        return Complex(-real,-imag);}
    friend Complex Cminus(Complex &c1,Complex &c2);
    friend Complex Crevf(Complex &c);
    private:
    double real;
    double imag;};
Complex Cminus(Complex &c1,Complex &c2){
    Complex c;
    c.real=c1.real-c2.real;
    c.imag=c1.imag-c2.imag;
    return c;}
Complex Crevf(Complex &c){
    return Complex(-c.real,-c.imag);}

int main()
{
    Complex c1(2,3),c2(1,5),c;
    c=c1.Cadd(c2);
    c.display();
    c=Cminus(c1,c2);
    c.display();
    c=c1.Crev();
    c.display();
    c=Crevf(c1);
    c.display();
    return 0;
}

定义
类型 类名::operator op(参数表){
//相对于定义的操作}
1、一元运算符
object op或op object
重载为成员函数,解释为:
object.operator op()
操作数由对象object通过this指针隐含传递
重载为友元函数,解释为:
operator op(boject)
操作数由参数表的object提供
2、二元运算符
objectL op objectR
重载为成员函数,解释为:
object.operatora op()
操作数由objectL通过this指针传递,右操作数由参数objectR传递
重载为友元函数,解释为:
operator op (objectL,objectR)
左右操作数都由参数传递

(2)重载运算符

#include <iostream>
using namespace std;
class Complex{
    public:
    Complex(double r=0.0,double i=0.0){
        real=r;imag=i;}
    Complex operator + (Complex c1);
    Complex operator - (Complex c1);
    void display();
    private:
    double real;
    double imag;};
Complex Complex::operator + (Complex c1){
    Complex c;
    c.real=real+c1.real;
    c.imag=imag+c1.imag;
    return c;}
Complex Complex::operator - (Complex c1){
    Complex c;
    c.real=real-c1.real;
    c.imag=imag-c1.imag;
    return c;}
void Complex::display(){
    cout<<"("<<real<<","<<imag<<")"<<endl;}

int main()
{
    Complex c1(5,4),c2(2,10),c3;
    cout<<"c1=";c1.display();
    cout<<"c2=";c2.display();
    c3=c1-c2;
    cout<<"c3=c1-c2=";c3.display();
    c3=c1+c2;
    cout<<"c3=c1+c2=";
    c3.display();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值