示例:常规的重载:
#include<iostream>
using namespace std;
class Complex
{
public:
Complex();//构造函数//没有初始化
Complex(double r,double i);
//进行初始化,初始化的参数赋值给private数据成员
Complex complex_add(Complex &d);//实现加法的方法
void print();
private:
double real;
double imag;
};
/*类的成员函数,也可以直接写入类里面,但为了代码的可读性,
* 写在外面,用::引用。如果只有一行简易的代码可以考虑
* 写入类里面。
*/
Complex::Complex()
{
real=0;
imag=0;
}
Complex::Complex(double r,double i)
{
real=r;
imag=i;
}
Complex Complex::complex_add(Complex &d)
/*注意上处容易错误写成Complex Complex_add(Complex &d)
*提示error: ‘double Complex::real’ is private
*::为引用运算符
*第一个Complex为函数类型。
*/
{
Complex c;
c.real=real+d.real;
c.imag=real+d.imag;
return c;
}
void Complex::print()
{
cout<< "(" << real << "," << imag << "i)\n"<<endl;
}
int main()
{
Complex c1(3,4),c2(5,-10),c3(1,-1),c4;
c4=(c1.complex_add(c2)).complex_add(c3);
cout<<"c1="<<endl;
c1.print();
cout<<"c2="<<endl;
c2.print();
cout<<"c3="<<endl;
c3.print();
std::cout<<"c1+c2+c3=";
c4.print();
//c3::print();error: ‘c3’ is not a class or namespace
//c3为一个具体的对象。
return 0;
}
由于上例子中明显可以看到使用常规的重载函数,代码不易于阅读,采用了
运算符重载
#include<iostream> using namespace std; class Complex { public: Complex();//构造函数//没有初始化 Complex(double r,double i); //进行初始化,初始化的参数赋值给private数据成员 Complex operator+(Complex &d);//实现加法的方法 void print(); private: double real; double imag; }; /*类的成员函数,也可以直接写入类里面,但为了代码的可读性, * 写在外面,用::引用。如果只有一行简易的代码可以考虑 * 写入类里面。 */ Complex::Complex() { real=0; imag=0; } Complex::Complex(double r,double i) { real=r; imag=i; } Complex Complex::operator+(Complex &d) /*注意上处容易错误写成Complex Complex_add(Complex &d) *提示error: ‘double Complex::real’ is private *::为引用运算符 *第一个Complex为函数类型。 */ { // Complex c; // c.real=real+d.real; // c.imag=real+d.imag; // return c; return Complex(real+d.real,real+d.imag); } void Complex::print() { cout<< "(" << real << "," << imag << "i)\n"<<endl; } int main() { Complex c1(3,4),c2(5,-10),c3(1,-1),c4; c4=c1+c2+c3; cout<<"c1="<<endl; c1.print(); cout<<"c2="<<endl; c2.print(); cout<<"c1+c2+c3="<<endl; c4.print(); return 0; }