标签: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++
原文地址:http://9362125.blog.51cto.com/9352125/1684874