讨论的问题:用户能否根据自己的需要对cpp已提供的运算符进行重载,赋予他们新的含义,使之一名多用
通过函数来实现复数相加
1 #include <iostream> 2 using namespace std; 3 4 //定义Complex类 5 class Complex 6 { 7 public: 8 9 Complex() 10 { 11 real=0; 12 imag=0; 13 }//定义构造函数 14 15 Complex(double r, double i) 16 { 17 real=r; 18 imag=i; 19 }//构造函数重载 20 21 Complex complex_add(Complex &c2);//声明复数相加函数 22 23 void display();//声明输出函数 24 25 private: 26 27 double real; 28 double imag; 29 }; 30 31 Complex Complex::complex_add(Complex &c2)//定义复数相加函数 32 { 33 Complex c;//创建对象c 34 c.real=real+c2.real;//c.real=this->real+c2.real 35 c.imag=imag+c2.imag;//c.imag=this->imag+c2.imag 36 return c; 37 } 38 39 void Complex::display() 40 { 41 cout<<"("<<real<<","<<imag<<"i)"<<endl; 42 } 43 44 int main() 45 { 46 Complex c1(3,4),c2(5,-10),c3;//创建对象c1,c2,c3 47 c3=c1.complex_add(c2); 48 49 cout<<"c1="; 50 c1.display(); 51 52 cout<<"c2="; 53 c2.display(); 54 55 cout<<"c1+c2="; 56 c3.display(); 57 58 return 0; 59 }
运算符重载的方法:定义一个重载运算符的函数
使得指定的运算符不仅能实现原有的功能,而且能实现在函数中指定的新功能
运算符的实质:函数的重载
关键字:operator
#include <iostream> using namespace std; //定义Complex类 class Complex { public: Complex() { real=0; imag=0; }//定义构造函数 Complex(double r, double i) { real=r; imag=i; }//构造函数重载 /* Complex complex_add(Complex &c2);//声明复数相加函数 */ Complex operator +(Complex &c2);//声明重载运算符+的函数 void display();//声明输出函数 private: double real; double imag; }; #if 0 Complex Complex::complex_add(Complex &c2)//定义复数相加函数 { Complex c;//创建对象c c.real=real+c2.real; c.imag=imag+c2.imag; return c; } #endif Complex Complex ::operator+(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } void Complex::display() { cout<<"("<<real<<","<<imag<<"i)"<<endl; } int main() { Complex c1(3,4),c2(5,-10),c3;//创建对象c1,c2,c3 //c3=c1.complex_add(c2); c3=c1+c2; cout<<"c1="; c1.display(); cout<<"c2="; c2.display(); cout<<"c3 value:c1+c2="; c3.display(); return 0; }