定一个日期类,至少包括年,月,日三个成员和一个表示星期的指针成员,编写自定义拷贝构造函数,完成深拷贝。
时间: 2024-05-14 14:17:55 浏览: 23
以下是一个简单的日期类的定义,包括年、月、日、星期四个成员变量,并且实现了自定义的拷贝构造函数,以完成深拷贝:
```c++
#include <iostream>
#include <cstring>
class Date {
public:
Date(int year = 0, int month = 0, int day = 0, const char* week = "Monday")
: m_year(year), m_month(month), m_day(day)
{
m_week = new char[strlen(week) + 1];
strcpy(m_week, week);
}
Date(const Date& other)
: m_year(other.m_year), m_month(other.m_month), m_day(other.m_day)
{
m_week = new char[strlen(other.m_week) + 1];
strcpy(m_week, other.m_week);
}
~Date() {
delete[] m_week;
}
Date& operator=(const Date& other) {
if (this != &other) {
m_year = other.m_year;
m_month = other.m_month;
m_day = other.m_day;
delete[] m_week;
m_week = new char[strlen(other.m_week) + 1];
strcpy(m_week, other.m_week);
}
return *this;
}
void print() const {
std::cout << m_year << "-" << m_month << "-" << m_day << " " << m_week << std::endl;
}
private:
int m_year;
int m_month;
int m_day;
char* m_week; // 星期,使用指针成员
};
int main() {
Date d1(2021, 10, 1, "Friday");
Date d2 = d1;
Date d3;
d3 = d1;
d1.print();
d2.print();
d3.print();
return 0;
}
```
在上述代码中,我们使用了一个指针成员变量 `m_week` 来表示星期,这个成员变量需要动态分配内存来存储字符串。为了完成深拷贝,我们需要实现自定义的拷贝构造函数和赋值运算符重载函数,其中需要注意动态分配内存的拷贝和释放。在 `main()` 函数中,我们分别使用了拷贝构造函数和赋值运算符重载函数来创建了两个新的日期对象,并且都能够正确打印出日期和星期信息。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)