运算符重载的定义:
用户对于自定义类型的运算操作,例如复数的运算。需要重新定义运算符号(创建函数)。
除了类属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、sizeof运算符和三目运算符"?:"以外,C++中的所有运算符都可以重载。
复数的运算符重载如下:
<span style="font-size:18px;">
#include<iostream> #include<string> using namespace std; class Complex; Complex operator+(int x, Complex &c); ostream& operator<<(ostream &out, const Complex &c); istream& operator>>(istream &in, Complex &c); class Complex { friend istream& operator>>(istream &in, Complex &c); friend ostream& operator<<(ostream &out, const Complex &c); friend Complex operator+(int x, Complex &c); public: Complex(const int real = 0, const int imag = 0) :m_real(real), m_imag(imag) {} ~Complex() {} void Show()const { cout << "(" << m_real << "," << m_imag << ")" << endl; } public: Complex operator+(int x) { return Complex(m_real + x, m_imag); } Complex operator+(Complex &c) { return Complex(m_real + c.m_real, m_imag + c.m_imag); } Complex operator-(Complex &c) { return Complex(m_real - c.m_real, m_imag - c.m_imag); } friend Complex operator+(int x, Complex &c) { return Complex(x + c.m_real, c.m_imag); } friend Complex operator-(int x, Complex &c) { return Complex(x - c.m_real, -c.m_imag); } Complex operator*(Complex &c); friend Complex operator*(int x, Complex &c); Complex operator/(Complex &c); friend Complex operator/(int x, Complex &c); Complex operator+=(Complex &c); Complex operator-=(Complex &c); Complex operator*=(Complex &c); Complex operator/=(Complex &c); private: int m_real; int m_imag; }; Complex Complex::operator/(Complex &c) { Complex temp; temp.m_real = (m_real*c.m_real + m_imag*c.m_imag) / (c.m_real*c.m_real + c.m_imag*c.m_imag); temp.m_imag = (m_imag*c.m_real - m_real*c.m_imag) / (c.m_real*c.m_real + c.m_imag*c.m_imag); return temp; } Complex operator/(int x, Complex &c) { Complex temp; temp.m_real = (x*c.m_real) / (c.m_real*c.m_real + c.m_imag*c.m_imag); temp.m_imag = (-x*c.m_imag) / (c.m_real*c.m_real + c.m_imag*c.m_imag); return temp; } Complex Complex:: operator+=(Complex &c) { m_real = m_real + c.m_real; m_imag = m_imag + c.m_imag; return *this; } Complex Complex::operator-=(Complex &c) { m_real = m_real - c.m_real; m_imag = m_imag - c.m_imag; return *this; } Complex Complex:: operator*(Complex &c) { return Complex(m_real*c.m_real - m_imag*c.m_imag, m_imag*c.m_real + m_real*c.m_imag); } Complex operator*(int x, Complex &c) { return Complex(c.m_real*x, c.m_imag*x); } Complex Complex::operator*=(Complex &c) { int i = m_real; m_real = m_real*c.m_real - m_imag*c.m_imag; m_imag = m_imag*c.m_real + i*c.m_imag; return *this; } Complex Complex:: operator/=(Complex &c) { m_real = (m_real*c.m_real + m_imag*c.m_imag) / (c.m_real*c.m_real + c.m_imag*c.m_imag); m_imag = (m_imag*c.m_real - m_real*c.m_imag) / (c.m_real*c.m_real + c.m_imag*c.m_imag); return *this; } ostream& operator<<(ostream &out, const Complex &c) { out << "(" << c.m_real << "," << c.m_imag << ")"; return out; } istream& operator>>(istream &in, Complex &c) { in >> c.m_real >> c.m_imag; return in; } int main() { Complex c1(2, 1); Complex c2(3, 2); Complex c; c = c1 + c2; cout<<c1<<"+"<<c2<<"="<<c<<endl; c = c1 * c2; cout << c1 << "*" << c2 << "=" << c << endl; c = c1 / c2; cout << c1 << "*" << c2 << "=" << c << endl; c = 2 + c1; cout <<"2"<< "+" << c1 << "=" << c << endl; // c1+=c2; // cout<<c1<<endl; // c1-=c2; // cout<<c1<<endl; c1 *= c2; cout << c1 << endl; c1 /= c2; cout << c1 << endl; c = 4 / c1; cout << c << endl; Complex c3; cin>>c3; cout<<c3; return 0; }
</span>
运行结果:
原文地址:http://blog.csdn.net/irean_lau/article/details/46393651