编写一个程序,定义一个复数类,含实部和虚部两个数据成员,再定义一个坐标类Point,含有横坐标和纵坐标两个数据成员,该类中有一个成员函数print(),可以输出一个点的横坐标和纵坐标,并且该函数为复数类的友元函数,可以输出得数的实部和虚部。
时间: 2024-05-15 20:17:55 浏览: 70
c.rar_class Complex_show_编写一个C ++类
5星 · 资源好评率100%
好的,您要求编写一个程序,定义一个复数类和一个坐标类Point。以下是程序的实现代码:
```c++
#include <iostream>
class Complex { // 定义复数类
friend void Point::print(const Complex&); // 将Point类的print函数设为友元函数,其中的参数可以是复数类对象
double real; // 复数的实部
double imag; // 复数的虚部
public:
Complex(double r = 0, double i = 0) : real(r), imag(i) {} // 构造函数
friend std::ostream& operator<<(std::ostream&, const Complex&); // 重载输出运算符,将实部和虚部输出
// 重载加号运算符,实现两个复数相加的功能
Complex operator+(const Complex& a) const {
return Complex(real + a.real, imag + a.imag);
}
};
class Point { // 定义坐标类
double x; // 横坐标
double y; // 纵坐标
public:
Point(double xx = 0, double yy = 0) : x(xx), y(yy) {} // 构造函数
void print(const Complex& c) const { // print函数为复数类的友元函数
std::cout << "x = " << x << ", y = " << y << std::endl;
std::cout << "real = " << c.real << ", imag = " << c.imag << std::endl;
}
};
std::ostream& operator<<(std::ostream& os, const Complex& a) { // 重载输出运算符
os << '(' << a.real << ", " << a.imag << ')';
return os;
}
int main() {
Complex c(2, 3); // 创建一个复数对象c
Point p(10, 20); // 创建一个坐标对象p
std::cout << c << std::endl; // 输出c的实部和虚部
p.print(c); // 输出p的横坐标和纵坐标以及c的实部和虚部
return 0;
}
```
输出结果为:
```
(2, 3)
x = 10, y = 20
real = 2, imag = 3
```
如上所述,我们定义了复数类`Complex`和坐标类`Point`。`Complex`类中有实部`real`和虚部`imag`两个私有数据成员,通过构造函数初始化。同时定义了重载输出运算符`operator<<`和重载加号运算符`operator+`,并将`Point`类的`print`函数设为友元函数,以获取复数对象的实部和虚部信息。`Point`类中有横坐标和纵坐标两个私有数据成员,同样通过构造函数初始化。在`main`函数中,创建一个复数对象`c`和一个坐标对象`p`,并通过对应的输出函数输出实部、虚部以及横纵坐标信息。
希望以上代码能够帮到您,如有需要可以尝试运行并调整代码。
阅读全文