分别利用类的成员函数operator+和友元函数,实现运算符“+”的重载,使之用于复数相加。参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。如C1+C2,i+C1,C1+i均合法(设i是整数,C1,C2为复数)。编程序,分别求两个复数之和、整数和复数之和
时间: 2024-11-29 15:32:38 浏览: 18
在C++中,你可以创建一个复数类`Complex`,并通过以下两种方式重载运算符`+`:
1. **非成员函数** (采用函数对象或运算符重载函数)
```cpp
class Complex {
public:
// 其他复数构造函数和成员变量...
};
// 复制构造函数和赋值运算符使整数和复数可以相互混合
Complex operator+(const Complex& c1, const Complex& c2) {
return Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
}
Complex operator+(const Complex& c, int i) {
return Complex(c.real + i, c.imaginary);
}
int main() {
Complex c1(1, 2), c2(3, 4);
Complex sum = c1 + c2;
std::cout << "Two complex numbers: " << sum << std::endl;
Complex c3(5, 6);
Complex mixed_sum = c3 + 10; // 注意这里将整数10转换为Complex类型的临时对象
std::cout << "Integer and complex number: " << mixed_sum << std::endl;
double d1;
Complex double_complex_sum = c1 + 3.14; // 这里假设d1是一个double类型
d1 = double_complex_sum.real; // 储存在double变量中
std::cout << "Double and complex number: " << d1 << std::endl;
return 0;
}
```
2. **成员函数** (友元函数)
```cpp
class Complex {
public:
friend Complex operator+(const Complex& c1, const Complex& c2); // 定义友元函数
friend Complex operator+(const Complex& c, int i); // 定义友元函数
// 其他成员函数...
};
// 实现友元函数
Complex Complex::operator+(const Complex& c2) const {
return Complex(real + c2.real, imaginary + c2.imaginary);
}
Complex Complex::operator+(int i) const {
return Complex(real + i, imaginary);
}
// 主函数同上
```
这两种方式的主要区别在于,非成员函数不需要访问类的内部状态,因此适用于通用的运算符重载,而成员函数可以更直接地操作类的对象,但可能会受到类的访问控制限制。
阅读全文