标签: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