题目描述
软件作为一种对象也可以用类来描述,软件的属性包括软件名称、类型(分别用O、T和B表示原版、试用版还是备份)、有效截至日期(用CDate类子对象表示)和存储介质(分别用D、H和U表示光盘、磁盘和U盘)等。软件拷贝可通过拷贝构造函数来实现,此时在拷贝构造函数中软件类型改成“B”,
存储介质改为"H",其它不变。试完成该类的拷贝构造、构造和打印(包括从2015年4月7日算起有效期还有多少天,是否过期)成员函数的实现。
当输入软件有效截止日期是0年0月0日,表示无日期限制,为unlimited;当输入日期在2015年4月7日之前,则是过期,表示为expired;如果输入日期在2015年4月7日之后,则显示之后的剩余天数。具体输出信息看输出范例。

附CDate类的实现:

 class CDate
{private:int year, month, day;
public:CDate(int y, int m, int d) { year = y; month = m; day = d; }bool isLeapYear() { return (year%4 == 0 && year%100 != 0) || year%400 == 0; }int getYear() { return year; }int getMonth() { return month; }int getDay() { return day; }int getDayofYear()         //计算日期从当年1月1日算起的天数{int i, sum=day; int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};if (isLeapYear())for(i=0;i<month;i++)   sum +=b[i];elsefor(i=0;i<month;i++)   sum +=a[i];return sum;}};

输入
测试数据的组数 t
第一个软件名称
第一个软件类型 第一个软件介质类型 第一个软件有效期年 月 日
第二个软件名称
第二个软件类型 第二个软件介质类型 第二个软件有效期年 月 日

输出
name: 第一个软件名称
type: 第一个软件类型
media:第一个软件介质类型
第一个软件2015-4-7后的有效天数

name: 第一个软件名称
type: backup
media: hard disk
第一个软件2015-4-7后的有效天数

样例输入
3
Photoshop_CS5
O D 0 0 0
Audition_3.0
B U 2015 2 3
Visual_Studio_2010
T H 2015 5 5
样例输出
name:Photoshop_CS5
type:original
media:optical disk
this software has unlimited use

name:Photoshop_CS5
type:backup
media:hard disk
this software has unlimited use

name:Audition_3.0
type:backup
media:USB disk
this software has expired

name:Audition_3.0
type:backup
media:hard disk
this software has expired

name:Visual_Studio_2010
type:trial
media:hard disk
this software is going to be expired in 28 days

name:Visual_Studio_2010
type:backup
media:hard disk
this software is going to be expired in 28 days

#include<iostream>
#include <cstring>
using namespace std;
class CDate
{private:int year, month, day;
public:CDate(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; }CDate(){}//无参构造函数bool isLeapYear() { return (year%4 == 0 && year%100 != 0) || year%400 == 0; }int getYear() { return year; }int getMonth() { return month; }int getDay() { return day; }int getDayofYear()         //计算日期从当年1月1日算起的天数{int i, sum=day; int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};if (isLeapYear())for(i=0;i<month;i++)   sum +=b[i];elsefor(i=0;i<month;i++)   sum +=a[i];return sum;}
};
class software{private:char *name;char type;CDate useful_day;//有效日期char media;public:software(char *n,char t,char med,int y,int m,int d){int len=strlen(n);name=new char[len+1];strcpy(name,n);type=t;media=med;useful_day.set(y,m,d);}void print(){cout<<"name:"<<name<<endl;switch(type){case 'O':cout<<"type:original"<<endl;break;case 'T':cout<<"type:trial"<<endl;break;case 'B':cout<<"type:backup"<<endl;break;}switch(media){case 'D':cout<<"media:optical disk"<<endl;break;case 'H':cout<<"media:hard disk"<<endl;break;case 'U':cout<<"media:USB disk"<<endl;break;}if(useful_day.getDay()==0&&useful_day.getMonth()==0&&useful_day.getYear()==0)cout<<"this software has unlimited use"<<endl;else if((useful_day.getYear()>=2015&&useful_day.getMonth()>=4&&useful_day.getDay()>=7)||(useful_day.getYear()>=2015&&useful_day.getMonth()>4)){//其实这里只考虑了年份为2015年的情况,不完整cout<<"this software is going to be expired in "<<useful_day.getDayofYear()-97<<" days"<<endl;//计算的天数-97(即四月7日的天数) }else{cout<<"this software has expired"<<endl;}}software(software &s){//拷贝构造函数int len=strlen(s.name);name=new char[len+1];strcpy(name,s.name);type='B';media='H';useful_day=s.useful_day;}~software(){//析构函数delete name;}
};
int main(){int t,y,d,m;char name[50],type,media;cin>>t;for(int i=0;i<t;i++){cin>>name>>type>>media>>y>>m>>d;software s1(name,type,media,y,m,d);s1.print();cout<<endl;software s2(s1);s2.print();cout<<endl;}}

字符串复制strcpy函数使用的注意事项

如果要将一段字符串复制给另一个字符指针,必须为这个字符指针new 一个长度 否则无法复制将出现错误

char n[50],*m;
cin>>n;
int len=strlen(n);
m=new char[len+1];
strcpy(m,n);//正确,可以复制值
————————————————————————————————————————
char n[50],*m;
cin>>n;
strcpy(m,n);//错误

C++ 软件备份(拷贝构造函数)相关推荐

  1. D. 软件备份(拷贝构造函数)

    题目描述软件作为一种对象也可以用类来描述,软件的属性包括软件名称.类型 (分别用O.T和B表示原版.试用版还是备份).有效截至日期(用CDate类 子对象表示)和存储介质(分别用D.H和U表示光盘.磁 ...

  2. C++软件备份(拷贝构造函数)

    题目描述 软件作为一种对象也可以用类来描述,软件的属性包括软件名称.类型(分别用O.T和B表示原版.试用版还是备份).有效截至日期(用CDate类子对象表示)和存储介质(分别用D.H和U表示光盘.磁盘 ...

  3. 【id:52】【20分】D. 软件备份(拷贝构造函数)

    题目描述 软件作为一种对象也可以用类来描述,软件的属性包括软件名称.类型(分别用O.T和B表示原版.试用版还是备份).有效截至日期(用CDate类子对象表示)和存储介质(分别用D.H和U表示光盘.磁盘 ...

  4. 用友文件服务器不存在,用友T6软件备份提示超时已过期,错误'53'文件不存在

    用友t6软件备份提示超时已过期,错误'53'文件不存在备份提示超时已过期,错误'53'文件不存在 备份提示超时已过期,错误'53'文件不存在 原因分析:后台表ua_log日志记录太多. 问题解答:清除 ...

  5. 管家婆服务器备份在哪个文件夹,管家婆财务软件备份以及恢复方法

    管家婆财务软件备份以及恢复方法 管家婆软件安装好之后一般默认为每天自动备份一次,自动备份周期在软件的系统配置里修改.如果重装系统或者防止数据丢失,可以自己手动备份.下面是yjbys小编为大家带来的关于 ...

  6. 管家婆服务器备份文件夹,管家婆软件备份以及恢复方法

    管家婆软件备份以及恢复方法 管家婆软件安装好之后一般默认为每天自动备份一次,自动备份周期在软件的系统配置里修改.如果重装系统或者防止数据丢失,可以自己手动备份.下面是yjbys小编为大家带来的管家婆软 ...

  7. 备忘录_C++_拷贝构造函数

    脚踏实地,仰望星空 目录视图 摘要视图 订阅 程序员必须要学会算法吗     博客专家庄晓立:我为什么要选择Rust?     从零练就iOS高手实战班震撼来袭     新型数据库利弊谈     C+ ...

  8. C++ 复制构造函数或者拷贝构造函数

    复制构造函数 是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象. 复制构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象. 复制对象把它作为参数传 ...

  9. C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)

    1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...

  10. 【C++】何时需要自定义拷贝构造函数和赋值符

    先来说结论:当类中有指针类型成员变量的时候,一定要自定义拷贝构造和赋值运算符 原因:当我们在有指针类成员变量的时候,还是用默认拷贝构造函数(拷贝构造函数执行的时候会调用赋值符),默认赋值为浅拷贝,会导 ...

最新文章

  1. 百度今晨7:20分“宕机”
  2. crontab wget命令定时执行thinkphp的控制器实现定时任务
  3. c语言去尾法和进一法的例子,《去尾法与进一法》教学案例与反思
  4. Java-类与对象的创建
  5. 这是我用Microsoft Word 2010 直接发布的测试用博客
  6. 循环 计算数值的整数次幂
  7. 怎么在Linux中安装gcc编译器使用,如何在linux中安装gcc编译器?
  8. JavaWeb实体类转为json对象
  9. 新生周赛——YZJ的牛肉干
  10. python高级索引
  11. 智慧实验室LIMS系统真的有必要建设吗?
  12. CapstoneCS5263|DP转HDMI 4K60HZ方案|替代PS176芯片
  13. UIPATH 调用SAP BAPI
  14. Kafka 的消息异常情况~追日
  15. 短线牛股技术买点图解 擒牛选股预警 ​通达信选股公式 副图 源码
  16. 01--计算机基础知识
  17. java编程cpu选i5还是i7,i5处理器和i7哪个好_i5和i7怎么选择-系统城
  18. 我用Python写自动刷代理服务IP的经过
  19. 第一次用示波器怎么使用(基础经验)
  20. 计算机入坠选择题,[转载]计算机基础知识题库(五)

热门文章

  1. FxFactory pro for mac(视觉特效插件包)含破解码教程
  2. 计算机自顶向下WireShark实验2:DNS
  3. 游戏运行时,WIN2003报错:设备 \Device\Harddisk0有一个不正确的区块。
  4. 磁盘分区助手使用心得
  5. 基于JDK1.8的JVM 内存结构【JVM篇三】
  6. js距离单位换算_在线单位换算器
  7. C程序-将华氏温度转换为摄氏和开氏
  8. html点击按钮展开文字,JS 展开/收起按钮显示隐藏文字示例
  9. Matter over Wi-Fi: Raspberry Pi 4开发环境设置
  10. 安装Petalinux