码迷,mamicode.com
首页 > 编程语言 > 详细

C++中的运算符重载

时间:2015-08-15 18:29:13      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:c++

四种不能重载的运算符:

1> ::    域运算符

2> .     成员访问运算符

3> *    成员 指针访问运算符((*this).member)

4>:?    三目运算符


只能用友元重载的运算符:

1> <<   输出运算符重载

2>  >>   输入运算符重载



即能声明友元又能声明为类的成员函数的运算符重载:

1>  四则运算符

2>   ++ --运算符

3>   != == +=  -=  *=  /= 运算符


只能声明为类的成员函数的运算符

1>[]  下标运算符

2>()  

3> ->  

4>=   赋值运算符


一般不用重载的运算符

1>=

2>&

3>*

另外重载只能是现有的运算符,且重载后不能改变运算符的优先级。


下面是一个例子:

//
//  Complex.h
//  train5
//
//  Created by student on 15/8/11.
//  Copyright (c) 2015年 personals. All rights reserved.
//

#ifndef __train5__Complex__
#define __train5__Complex__

#include <iostream>
using namespace std;
class Complex{
public:
    Complex(int r1=0,int i1=0);
    ~Complex(){}
    const Complex& operator--();         //前置减减(实部减一,虚部不变)
    const Complex operator--(int);       //后置减减
    
    friend const Complex operator+(const Complex& p1,const Complex& p2);
    friend const Complex operator-(const Complex& p1,const Complex& p2);
    friend const Complex operator*(const Complex& p1,const Complex& p2);
    friend const Complex operator/(const Complex& p1,const Complex& p2);
    friend Complex operator+=(Complex& c1,const Complex& c2);
    friend Complex operator-=(Complex& c1,const Complex& c2);
    friend Complex operator*=(Complex& c1,const Complex& c2);
    friend Complex operator/=(Complex& c1,const Complex& c2);
    
    friend ostream& operator<<(ostream& out,const Complex& c1);
    friend bool operator==(const Complex& c1,const Complex& c2);
    friend bool operator!=(const Complex& c1,const Complex& c2);
    
private:
    int r,i;
};

#endif /* defined(__train5__Complex__) */


//
//  Complex.cpp
//  train5
//
//  Created by student on 15/8/11.
//  Copyright (c) 2015年 personals. All rights reserved.
//

#include "Complex.h"
Complex::Complex(int r1,int i1){
    r=r1;
    i=i1;
}

const Complex operator+(const Complex& p1,const Complex& p2){
    return Complex(p1.r+p2.r,p1.i+p2.i);
}
const Complex operator-(const Complex& p1,const Complex& p2){
    return Complex(p1.r-p2.r,p1.i-p2.i);
}
const Complex operator*(const Complex& p1,const Complex& p2){
    return Complex(p1.r*p2.r-p1.i*p2.i,p1.r*p2.i+p1.i*p2.r);
}
const Complex operator/(const Complex& p1,const Complex& p2){
    float den=p2.r*p2.r+p2.i*p2.i;
    return Complex((p1.r*p2.r+p1.i*p2.i)/den,(-p1.r*p2.i+p1.i*p2.r)/den);
}

Complex operator+=(Complex& c1,const Complex& c2){
    c1=c1+c2;
    return c1;
}
Complex operator-=(Complex& c1,const Complex& c2){
    c1=c1-c2;
    return c1;
}
Complex operator*=(Complex& c1,const Complex& c2){
    c1=c1*c2;
    return c1;
}
Complex operator/=(Complex& c1,const Complex& c2){
    c1=c1/c2;
    return c1;
}

/*const Complex& Complex::operator--(){
    this->r-=1;
    return *this;
}*/

/*const Complex Complex::operator--(int){
    Complex old = (*this);
    --(*this);
    return old;
}*/

const Complex& Complex::operator--(){
    Complex c(1,0);
    (*this)=(*this)-c;
    return *this;
}

const Complex Complex::operator--(int){
    Complex old = (*this);
    Complex c(1,0);
    (*this)=(*this)-c;
    return old;
}

ostream& operator<<(ostream& out,const Complex& c1){
    out<<"r="<<c1.r<<",i="<<c1.i<<endl;
    return out;
}

bool operator==(const Complex& c1,const Complex& c2){
    if ((c1.r==c2.r) && (c1.i==c2.i)) {
        return true;
    }
    else{
        return false;
    }
}
bool operator!=(const Complex& c1,const Complex& c2){
    if ((c1.r==c2.r) && (c1.i==c2.i)) {
        return false;
    }
    else{
        return true;
    }
}


//
//  main.cpp
//  train5
//
//  Created by student on 15/8/11.
//  Copyright (c) 2015年 personals. All rights reserved.
//

#include <iostream>
#include "Complex.h"
int main(int argc, const char * argv[])
{

    // insert code here...
    Complex c1(1,3),c2(4,5);
    Complex c;
    c1+=c2;
    cout<<c1;
    c1-=c2;
    cout<<c1;
    c1*=c2;
    cout<<c1;
    c1/=c2;
    cout<<c1;
    c1--;
    --c1;
    cout<<c1;
    if (c1==c2) {
        cout<<"c1==c2\n";
    }
    else if (c1!=c2){
        cout<<"c1!=c2\n";
    }
    //std::cout << "Hello, World!\n";
    return 0;
}


本文出自 “c0c0s” 博客,请务必保留此出处http://9362125.blog.51cto.com/9352125/1684874

C++中的运算符重载

标签:c++

原文地址:http://9362125.blog.51cto.com/9352125/1684874

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!