需求:想要實現乙個logger可以以以下方式使用:
logger log("2013-03-05.log");
log << "this is a logger test" << endl;
log << "value of temp = " << temp << endl;
log << "array[" << index << "] = " << array[index] << endl;
實現有一點類似cout。
下面是我定義logger類:
class logger
logger& operator << (int t)
// other operators, qchar, const char*, unsigned int, etc
// ...
logger& operator << ( logger& (*op) (logger&) )
private:
qstring m_logstr;}
static logger& endl (logger &log)
如何用《連線大家應該都很容易理解,關鍵技術點在這個endl。
其中最後乙個 operator << 過載告訴編譯器:如果《後面是乙個(logger&)(*op)(logger&)的函式指標,那麼就這麼呼叫它:(*op)(*this)
然後在全域性中實現了logger& endl(logger&)的函式。當log << endl 時,就會呼叫這個endl函式並執行。
就這樣,我何可以定義很多類似的流符號了。
那個可不可以這樣呢?
log << size(1024) << "set size ..." << endl;
我們需要可以像上面size()可以帶參的,怎麼實現?
struct size
int data;};
class logger
private:
int m_nsize;
}
定義結構體size,並指定其建構函式size(int value)。所以"log << size(1024)"中的"size(1024)"其實是在構造乙個size結構型別的變數,而1024就被存到了size::nsize中。
這就是我今天的收穫!謝謝**~~
寫乙個logger的類
參考 寫乙個logger的類 import logging 建立日誌物件 class logger def init self,logpath 制定log格式 format logging.formatter asctime s filename s name s line lineno d mes...
設計乙個類
1 設計乙個不能被繼承的類 1 將建構函式設為私有 此時子類不能訪問基類的建構函式,因此建立子類時就會報錯 無法訪問private成員 class base uninherit base uninherit const base uninherit rhs base uninherit operat...
設計乙個類,用get,set
建立乙個people類,裡面包含 名字 年齡 兩個成員變數,以及這兩個成員的get,set方法 要求用標頭檔案 實現檔案的標準格式實現,然後可以在main函式裡直接建立people物件 第一步 建立控制台程式 include stdafx.h include people.h include inc...