OJ第六批——Problem L: B 构造函数和析构函数

本文详细介绍了如何自定义复数类Complex,并在类中添加构造函数和析构函数来完成对象的初始化和清理工作。通过实例演示了如何在主程序中使用这些函数,并分析了其在对象生命周期中的作用。

问题及代码:

 

Problem L: B 构造函数和析构函数

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 729   Solved: 476
[ Submit][ Status][ Web Board]

Description

在建立类对象时系统自动该类的构造函数完成对象的初始化工作,
当类对象生命周期结束时,系统在释放对象空间之前自动调用析构函数。

此题要求:
根据主程序(main函数)和程序执行结果,结合构造函数和析构函数相关知识,在下面的程序段基础上完成整个设计。

提示:(1)需要自定义复数类Complex,并在类中添加适当的构造函数和析构函数。
          (2)只提交begin到end部分的代码

#include <iostream>
using namespace std;

//将程序需要的其他成份写在下面,只提交begin到end部分的代码
//******************** begin ********************


//********************* end ********************

int main()
{
double real,image;

cin>>real>>image;

Complex c1(real,image);

Complex c2=c1;

return 0;
}

程序输入输出样例如 Sample Input 和 Sample Output 所示。

Input

 一个复数的实部和虚部

Output

 调用相关构造函数和析构函数的运行结果(需要自己分析),参照Sample Output 所示。

Sample Input

1.5 2.6

Sample Output

(1.5,2.6i) is constructed!
(1.5,2.6i) is copy constructed!
destructed!
destructed!

HINT

(1)需要自定义复数类Complex,并在类中添加适当的构造函数和析构函数。

(2)只提交begin到end部分的代码

 

#include <iostream> 
using namespace std; 
class Complex 
{ 
private: 
    double real; 
    double imag; 
public: 
    Complex(); 
    Complex(double r,double i):real(r),imag(i) 
    { 
        cout<<"("<<real<<","<<imag<<"i) is constructed!"<<endl; 
        cout<<"("<<real<<","<<imag<<"i) is copy constructed!"<<endl; 
    } 
    ~Complex(); 
}; 
  
Complex::Complex() 
{ 
    real=imag=0; 
} 
  
Complex::~Complex() 
{ 
    cout<<"destructed!"<<endl; 
} 
int main() 
{ 
   double real,image; 
  
   cin>>real>>image; 
   
   Complex  c1(real,image); 
  
   Complex  c2=c1; 
  
   return 0; 
} 


 

### 关于山科 OJ Problem A 中 Point 类的实现与解法 在山科 OJProblem A 中,关于平面上的点以及 `Point` 类的设计实现,主要关注的是如何定义一个类来表示二维平面上的点,并提供必要的功能,例如显示点的坐标、获取点的坐标值等。以下是基于引用内容[^1]中的实现细节扩展说明: #### 1. **类定义** `Point` 类通过封装私有成员变量 `x` `y` 来存储点的坐标,并提供了公有接口以操作这些数据。以下是一个完整的类定义示例: ```cpp class Point { private: double x, y; // 私有成员变量,用于存储点的坐标 public: // 默认构造函数 Point() : x(0), y(0) {} // 带参数的构造函数 Point(double x_, double y_) : x(x_), y(y_) {} // 显示点的坐标 void show() { cout << "Point : (" << x << ", " << y << ")" << endl; } // 拷贝构造函数 Point(Point &p) : x(p.x), y(p.y) {} // 获取 x 坐标 double getx() { return x; } // 获取 y 坐标 double gety() { return y; } }; ``` 上述代码中,`show()` 方法用于打印点的坐标,而 `getx()` `gety()` 方法分别返回点的 `x` `y` 坐标[^1]。 #### 2. **重点难点分析** 根据引用内容,`Point` 类的重点难点在于以下几个方面: - **`get` 函数的写法**:`getx()` `gety()` 方法是访问私有成员变量的接口,确保外部无法直接修改点的坐标值。 - **`show` 函数的实现**:`show()` 方法需要正确格式化输出点的坐标,确保输出符合题目要求。 #### 3. **测试用例** 为了验证 `Point` 类的功能是否正确,可以编写以下测试代码: ```cpp #include <iostream> using namespace std; int main() { // 创建默认点 Point p1; p1.show(); // 创建带参数的点 Point p2(3.5, 4.7); p2.show(); // 使用拷贝构造函数 Point p3(p2); p3.show(); // 测试 get 方法 cout << "Point p2 coordinates: (" << p2.getx() << ", " << p2.gety() << ")" << endl; return 0; } ``` 运行结果应为: ``` Point : (0, 0) Point : (3.5, 4.7) Point : (3.5, 4.7) Point p2 coordinates: (3.5, 4.7) ``` #### 4. **扩展功能** 如果题目要求更复杂的功能,例如计算两点之间的距离或判断点是否重合,可以在 `Point` 类中添加相应的方法。例如: ```cpp // 计算两点之间的距离 double distanceTo(const Point &other) const { double dx = x - other.x; double dy = y - other.y; return sqrt(dx * dx + dy * dy); } // 判断两点是否重合 bool isEqual(const Point &other) const { return (x == other.x) && (y == other.y); } ``` 这些扩展方法可以进一步增强 `Point` 类的功能性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值