按照要求格式輸出常用方法有兩種
問題:按如下格式輸出時間
YY:MM:SS
第一種方法:重載流操作符<< ,代碼如下
- Time.h頭文件
//Time.h頭文件
#ifndef TIME_H_INCLUDED
#define TIME_H_INCLUDED
using namespace std;//必須要加
class Time
{
private:
int second;//秒
int minute;//分
int hour;//時
public:
Time();
Time(int h,int m,int s);
friend Time & operator++(Time &time);//返回值是一個對象,加個引用比較好
friend ostream & operator<<(ostream & out,Time & time);//這裏把重載的<<方法聲明爲友元函數是因爲該方法需要訪問Time類的私有屬性
};
/*而且需要寫成傳入自身參數形式,因爲這是友元函數重載一元運算符,不是成員函數方式重載的,
成員函數這裏就不用了傳入參數,本身有this指針
如果是二元運算符用友元函數重載二院運算符的話,則需要寫成傳入兩個參數的形式
成員函數重載二院運算符時就只需要傳入一個參數就行,另一個是本身的this指針
*/
#endif // TIME_H_INCLUDED
- Time.cpp具體實現
//Time.cpp具體實現類
#include <iostream>
#include <string>
#include "Time.h"
//必須使用c++2011版本編譯器才能使用string的相關操作
using namespace std;
Time::Time()
{
this->second = 0;
this->minute = 0;
this->hour = 0;
}
Time::Time(int h,int m,int s)//需要加Time::
{
second = s;
minute = m;
hour = h;
}
Time & operator++(Time &time)//因爲他不是成員函數,所以不要使用Time::(類名加作用域解析操作符)限定符。另外不要再定義中使用friend關鍵字
{
time.second += 1;//秒
time.minute = time.minute + time.second/60;//分
time.hour = time.hour + time.minute/60;//時
if(time.second==60)
{
time.second = 0;//重置秒數
}
if(time.minute==60)
{
time.minute = 0;//重置分數
}
if(time.hour==24)//重置時
{
time.hour = 0;
}
return time;
}
//重載流操作符<< 實現自定義格式輸出,另一種tostring方法見自己CSDN博客
ostream & operator<<(ostream & out,Time & time)
{
out << time.hour << ":" << time.minute << ":" << time.second;
return out;
}
- main.cpp主函數調用
//main.cpp主函數調用
#include <iostream>
#include "Time.h"
using namespace std;
int main()
{
Time t1;
Time t2(22,59,59);
cout << ++t2 << endl;
return 0;
}
運行結果:
第二種方法:利用c++2011新標準(2011年以後的都支持如果是codeblocks需要選擇編譯器版本見 https://blog.csdn.net/lereno/article/details/90266505)直接把要求格式tostring,再直接輸出,代碼如下:
- Time.h頭文件
//Time.h頭文件
#ifndef TIME_H_INCLUDED
#define TIME_H_INCLUDED
using namespace std;//必須要加
class Time
{
private:
int second;//秒
int minute;//分
int hour;//時
public:
Time();
Time(int h,int m,int s);
friend string operator++(Time &time);//返回值是一個對象,加個引用比較好,
};
/*而且需要寫成傳入自身參數形式,因爲這是友元函數重載一元運算符,不是成員函數方式重載的,
成員函數這裏就不用了傳入參數,本身有this指針
如果是二元運算符用友元函數重載二院運算符的話,則需要寫成傳入兩個參數的形式
成員函數重載二院運算符時就只需要傳入一個參數就行,另一個是本身的this指針
*/
#endif // TIME_H_INCLUDED
- Time.cpp具體實現類
//Time.cpp具體實現類
#include <iostream>
#include <string>
#include "Time.h"
//必須使用c++2011版本編譯器才能使用string的相關操作
using namespace std;
Time::Time()
{
this->second = 0;
this->minute = 0;
this->hour = 0;
}
Time::Time(int h,int m,int s)//需要加Time::
{
second = s;
minute = m;
hour = h;
}
string operator++(Time &time)//因爲他不是成員函數,所以不要使用Time::(類名加作用域解析操作符)限定符。另外不要再定義中使用friend關鍵字
{
time.second += 1;//秒
time.minute = time.minute + time.second/60;//分
time.hour = time.hour + time.minute/60;//時
if(time.second==60)
{
time.second = 0;//重置秒數
}
if(time.minute==60)
{
time.minute = 0;//重置分數
}
if(time.hour==24)//重置時
{
time.hour = 0;
}
string str = std::to_string(time.hour) + ":" + std::to_string(time.minute) + ":" + std::to_string(time.second);
return str;//也可以直接返回一個Time對象就是
}
- main.cpp主函數調用
//main.cpp主函數調用
#include <iostream>
#include "Time.h"
using namespace std;
int main()
{
Time t1;
Time t2(22,59,59);
cout << ++t2 << endl;
return 0;
}
運行結果: