我在网上搜到了两个资料,在程序中也都试验过了,有些疑惑。 复数相加: 第一种。 Complex operator+(Complex com1,Complex com2)//运算符重载函数 { return Complex(com1.real+com2.real,com1.imag+com2.imag); } 第二种: Complex Complex::operator+(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } 这两种参数个数都不同。 为什么 c3=c1+c2 最后的结果都是一样? 是编译器自动识别了第一种?如果是当做一个函数的话。 那么第一种的 c1+c2是在+号两端智能的代入了参数?
第一个是友元函数,不需要类对象调用。 第二种为类的函数,需要类对象调用 第一种: c3=operator+(c1,c2); 第二种 c3=c1.operator+(c2);