⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_12_1.cpp

📁 C++应用教程原码,里面包含该书中有十三章内容的代码,详细具体
💻 CPP
字号:
#include "stdafx.h"
#include <iostream>
//#include <string>
using namespace std;
class Date { 
  public:
    Date():year(0),month(0),day(0){}
    friend ostream& operator << (ostream&, Date&);
	friend istream& operator >> (istream&, Date&);
  	int year,month,day;
};

class input_error{
public:
	virtual void doit ()=0;
};
class year_error : public input_error{
private:
	Date& temp;
public:
	year_error(Date& d)
	:temp(d)
	{}
	void doit()
	{ while ( !cin)
		{ cin.clear();
			cin.ignore(90,'\n');
			cout << "输入错误,请重新输入年份"<<":";
			cin >> temp.year;
		}
	}
};
class month_error : public input_error{
private:
	Date& temp;
public:
	month_error(Date& d)
	:temp(d)
	{}
	void doit()
	{ while ( !cin||(temp.month>12)||(temp.month<=0))
		{ cin.clear();
			cin.ignore(90,'\n');
			cout << "输入错误,请重新输入月份"<<":";
			cin >> temp.month;
		}
	}
};
class day_error : public input_error{
private:
	Date& temp;
public:
	day_error(Date& d)
	:temp(d)
	{}
	void doit()
	{ while ( !cin||(temp.day>31)||(temp.day<=0))
		{ cin.clear();
			cin.ignore(90,'\n');
			cout << "输入错误,请重新输入日期"<<":";
			cin >> temp.day;
		}
	}
};
ostream& operator << (ostream& out, Date& date)
{  out << date.year << "年" << date.month << "月" << date.day << "日"<<endl;
   return out;
}
istream& operator >> (istream& in, Date &date)
{ try {
  cout << "输入年份:";
  in >> date.year;
  if (!in) 	  throw year_error(date);
  }
  catch (input_error &obj)
  {obj.doit();}
  try {
  cout << "输入月份:";
  in >> date.month;
  if (!in||(date.month>12)||(date.month<=0)) throw month_error(date);
  }
  catch (input_error &obj)
  {obj.doit();}
  try {
  cout << "输入日期:";
  in >> date.day;
  if (!in||(date.day>31)||(date.day<=0)) throw day_error(date);
  }
  catch (input_error &obj)
  {obj.doit();}
  return in;
}
void main()
{ Date date1;
  cin >> date1;
  cout << date1;
  cin.get(); cin.get(); //等待结束,以便调测程序,可以删除
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -