1 #include<iostream> 2 using namespace std; 3 class complex // 定义 complex 类 4 { 5 public: 6 complex(){real=0;imag=0;} // 定义 构造函数 // 默认 函数的 值 为 0 7 complex(double r,double i){real=r;imag=i;} // 构造函数重载 // 在 类内 定义 带参的构造函数重载 8 complex complex_add(complex &c2); //声明 复数相加函数 9 void display(); // 声明输出函数 10 private: 11 double real; 12 double imag; 13 }; 14 complex complex::complex_add(complex &c2) // 定义复数 相加 函数 // 返回类型为 complex 在类外定义 类complex 的 成员函数 complex_add 函数 . 15 { 16 complex c; 17 c.real=real+c2.real; 18 c.imag=imag+c2.imag; 19 return c; 20 } 21 void complex::display() 22 { 23 cout<<"("<<real<<","<<imag<<"i)"<<endl; 24 } 25 int main() 26 { 27 complex c1(3,4),c2(5,-10),c3; // 定义 三个 复数对象 28 c3=c1.complex_add(c2); 29 cout<<"c1="; 30 c1.display(); 31 cout<<"c2="; 32 c2.display(); 33 cout<<"c1+c2="; 34 c3.display(); 35 return 0; 36 } 37 // c1.complex--------在 声明 c1 这个 对象的 时候 已经 走了一遍的 complex类 这时候 real 和 imag 的 值就被保存在了 那一个 栈帧里面 38 // 当 调用 c1.complex_add的时候 这个就是 real 和 imag
重载(overloading):所谓重载,就是赋予新的含义.函数重载就是赋予新的含义,使之实现新的功能. 上面的 是 通过函数来实现 复数相加 下面将 上面的程序 稍作改动 实现 运算符重载. 给'+'赋予计算复数的功能
1 #include<iostream> 2 using namespace std; 3 class complex // 定义 complex 类 4 { 5 public: 6 complex(){real=0;imag=0;} // 定义 构造函数 // 默认 函数的 值 为 0 7 complex(double r,double i){real=r;imag=i;} // 构造函数重载 // 在 类内 定义 带参的构造函数重载 8 complex operator +(complex &c2); //声明 复数相加函数 9 void display(); // 声明输出函数 10 private: 11 double real; 12 double imag; 13 }; 14 complex complex::operator +(complex &c2) // 定义复数 相加 函数 // 返回类型为 complex 在类外定义 类complex 的 成员函数 complex_add 函数 . 15 { 16 complex c; 17 c.real=real+c2.real; 18 c.imag=imag+c2.imag; 19 return c; 20 } 21 void complex::display() 22 { 23 cout<<"("<<real<<","<<imag<<"i)"<<endl; 24 } 25 int main() 26 { 27 complex c1(3,4),c2(5,-10),c3; // 定义 三个 复数对象 28 c3=c1+c2; 29 cout<<"c1="; 30 c1.display(); 31 cout<<"c2="; 32 c2.display(); 33 cout<<"c1+c2="; 34 c3.display(); 35 return 0; 36 }