P317,13.3
View Code
1 #include <iostream> 2 #include <stdlib.h> 3 using namespace std; 4 5 static char daytable[2][13]={ 6 {0,31,28,31,30,31,30,31,31,30,31,30,31}, 7 {0,31,29,31,30,31,30,31,31,30,31,30,31} 8 }; 9 class Date 10 { 11 //重载为友元 12 //friend Date & operator+(Date &date,int d); 13 friend ostream & operator<<(ostream &output,Date &d); 14 public: 15 Date(); 16 Date(int y,int m,int d); 17 ~Date(); 18 //重载为成员函数 19 Date & operator+(int d); 20 static int isLeap(int y); 21 22 protected: 23 int year,month,day; 24 }; 25 26 Date::Date() 27 { 28 year=2013; 29 month=3; 30 day=25; 31 } 32 33 Date::Date(int y,int m,int d) 34 { 35 year=y; 36 month=m; 37 day=d; 38 } 39 40 int Date::isLeap(int y) 41 { 42 return (y%4==0 && y%100 || y%400==0); 43 } 44 45 Date::~Date() 46 {} 47 48 Date & Date::operator+(int d) 49 { 50 while(day+d>daytable[isLeap(year)][month]) 51 { 52 d-=daytable[isLeap(year)][month]-day; 53 if(month==12) 54 { 55 year++; 56 month=1; 57 } 58 else 59 month++; 60 day=0; 61 } 62 day+=d; 63 64 return *this; 65 } 66 67 68 ostream & operator<<(ostream &output,Date &d) 69 { 70 output<<d.year<<"-"<<d.month<<"-"<<d.day<<endl; 71 return output; 72 } 73 74 /* 75 Date & operator+(Date &date,int d) 76 { 77 while(date.day+d>daytable[Date::isLeap(date.year)][date.month]) 78 { 79 d-=daytable[Date::isLeap(date.year)][date.month]-date.day; 80 if(date.month==12) 81 { 82 date.year++; 83 date.month=1; 84 } 85 else 86 date.month++; 87 date.day=0; 88 } 89 date.day+=d; 90 return date; 91 }*/ 92 93 void main() 94 { 95 Date d(2013,3,25); 96 d=d+365; 97 cout<<d; 98 //system("pause"); 99 }
P317,13.7
View Code
1 #include <iostream> 2 #include <iomanip> 3 //#include <stdlib.h> 4 using namespace std; 5 6 class Time 7 { 8 friend ostream & operator<<(ostream &output,Time &time); 9 friend istream & operator>>(istream &input,Time &time); 10 public: 11 Time(int h=0,int m=0,int s=0); 12 private: 13 int hour,minute,second; 14 }; 15 16 Time::Time(int h,int m,int s) 17 { 18 hour=(h>=0 && h<=23)?h:0; 19 minute=(m>=0 && m<=59)?m:0; 20 second=(s>=0 && s<=59)?s:0; 21 } 22 23 ostream & operator<<(ostream &output,Time &time) 24 { 25 output<<setw(2)<<setfill('0')<<time.hour<<":" 26 <<setw(2)<<setfill('0')<<time.minute<<":" 27 <<setw(2)<<setfill('0')<<time.second<<endl; 28 //output<<time.hour<<":"<<time.minute<<":"<<time.second; 29 return output; 30 } 31 32 istream & operator>>(istream &input,Time &time) 33 { 34 char buffer[81]; 35 input.getline(buffer,3,'-'); 36 time.hour=atoi(buffer); 37 input.getline(buffer,3,'-'); 38 time.minute=atoi(buffer); 39 input.getline(buffer,3,'\n'); 40 time.second=atoi(buffer); 41 return input; 42 } 43 44 void main(void) 45 { 46 Time time(12,36,25); 47 cout<<"hh-mm-ss:"<<endl; 48 cin>>time; 49 cout<<time; 50 //system("pause"); 51 }