编写一个程序,定义一个复数类,含实部和虚部两个数据成员,再定义一个坐标类Point,含有横坐标和纵坐标两个数据成员,该类中有一个成员函数print(),可以输出一个点的横坐标和纵坐标,并且该函数为复数类的友元函数,可以输出得数的实部和虚部。
时间: 2024-05-06 11:21:50 浏览: 83
你好!你的第一个问题是编写一个程序,定义一个复数类和坐标类,其中复数类含有实部和虚部两个数据成员,坐标类含有横坐标和纵坐标两个数据成员。同时,复数类中有一个友元函数print(),可以输出得数的实部和虚部。下面是一个可能的实现:
```cpp
#include <iostream>
using namespace std;
class Point; // 声明一个坐标类
class Complex {
public:
Complex(double real, double imag): real(real), imag(imag) {}
// 友元函数,输出得数的实部和虚部
friend void print(const Complex& c) {
cout << c.real << " + " << c.imag << "i" << endl;
}
private:
double real, imag; // 实部和虚部
};
class Point {
public:
Point(double x, double y): x(x), y(y) {}
// 成员函数,输出一个点的横坐标和纵坐标
void print() const {
cout << "(" << x << ", " << y << ")" << endl;
}
friend void print(const Point& p) {
Complex c(p.x, p.y);
cout << "Complex number: ";
print(c);
}
private:
double x, y; // 横坐标和纵坐标
};
int main() {
Point p(1.2, 3.4);
p.print(); // 输出 (1.2, 3.4)
print(p); // 输出 Complex number: 1.2 + 3.4i
return 0;
}
```
在上面的程序中,我们首先定义了复数类 `Complex` 和坐标类 `Point`,并在 `Complex` 类中定义了一个友元函数 `print()`,用于输出复数的实部和虚部。在 `Point` 类中,我们也定义了一个成员函数 `print()`,并同时定义了一个友元函数 `print()`,在这个友元函数中,我们首先将坐标转换成一个复数对象,然后再调用 `Complex` 类中的友元函数 `print()` 来输出其实部和虚部。
在 `main()` 函数中,我们创建了一个 `Point` 对象 `p`,并分别调用了两个 `print()` 函数进行输出。通过这个例子,我们可以看到类之间的友元函数是如何在彼此之间实现协作的。
阅读全文