0
点赞
收藏
分享

微信扫一扫

【C++OJ拷贝构造】手机服务(构造+拷贝构造+堆)

人间四月天i 2022-05-04 阅读 147

【C++OJ拷贝构造】手机服务(构造+拷贝构造+堆)

题目描述

输入

输出

输入样例

输出样例

参考代码

#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;

class Date // Date类
{
private:
    int year;
    int month;
    int day;

public:
    Date() {}
    Date(int y, int m, int d) : year(y), month(m), day(d) {}
    void set(int y, int m, int d)
    {
        year = y;
        month = m;
        day = d;
    }
    int getyear() { return year; }
    int getmonth() { return month; }
    int getday() { return day; }
    ~Date() {}
};

class phone
{
private:
    char type;
    char *num;
    int state;
    Date *d1;

public:
    phone() {}
    phone(char t, char *n, int s) //有参构造,初始化
    {
        type = t;
        num = new char[12]; //这里也可以直接num=n
        strcpy(num, n);
        state = s;
        d1 = nullptr; //指针初始化为空
        cout << "Construct a new phone " << num << endl;
    }
    phone(const phone &p) //拷贝构造,复制已有对象的信息,并输出提示信息
    {
        type = 'D';         //号码备份,类型改为D,手机号码末尾加字母X
        num = new char[12]; // new空间复制号码
        strcpy(num, p.num);
        state = p.state;
        d1 = nullptr; //指针初始化为空
        cout << "Construct a copy of phone " << num << endl;
        char *s = "X";
        strcat(num, s);
    }

    void print() //打印功能,把对象的所有属性都输出
    {
        switch (type)
        {
        case 'A':
            cout << "类型=机构";
            break;
        case 'B':
            cout << "类型=企业";
            break;
        case 'C':
            cout << "类型=个人";
            break;
        case 'D':
            cout << "类型=备份";
            break;
        }
        cout << "||号码=" << num;
        switch (state)
        {
        case 1:
            cout << "||State=在用" << endl;
            break;
        case 2:
            cout << "||State=未用" << endl;
            break;
        case 3:
            cout << "||State=停用 ||停机日期=" << d1->getyear() << "." << d1->getmonth() << "." << d1->getday() << endl; //指针对象访问使用->
            break;
        }
    }

    void stop(Date &d2) //停机功能是停用当前号码,参数是停机日期,无返回值
    {
        state = 3;                                               //操作是把状态改成停用
        d1 = new Date(d2.getyear(), d2.getmonth(), d2.getday()); //并停机日期指针创建为动态对象,并根据参数来设置停机日期
        cout << "Stop the phone " << num << endl;                //输出提示信息
    }

    ~phone()
    {
        if (d1 != nullptr)
            delete d1;
    }
};

int main()
{
    int f;
    cin >> f;
    //输入6个参数,包括号码类型、号码、状态、停机的年、月、日
    char t;
    char n[12];
    int s, y, m, d;

    while (f--)
    {
        cin >> t >> n >> s >> y >> m >> d;
        phone p1(t, n, s); //刚开始日期指针为空
        Date d1(y, m, d);  //构造日期
        p1.print();
        phone p2(p1); //调用拷贝构造函数
        p2.print();
        p1.stop(d1); //停用,传入的是日期类
        p1.print();
        cout << "----" << endl;
    }
}
举报

相关推荐

0 条评论