我正在學習C++的過程中,以瞭解我已經給出的一些開源代碼。C++初學者問題
我通過管道傳來如下:
cmd << '\n'
我以爲,「CMD」必須是一個流某種特殊受體,也許是一個字符串 - 但在進一步調查中,我發現,「CMD」是一個具有各種數據和功能的整個班級。這完全困惑了我。爲什麼不代碼如下所示:
cmd.stringpart << '\n'
誰能告訴我這是怎麼回事,還是建議一篇文章給我看看。
更正: cmd是類的一個實例,而不是類本身。
我正在學習C++的過程中,以瞭解我已經給出的一些開源代碼。C++初學者問題
我通過管道傳來如下:
cmd << '\n'
我以爲,「CMD」必須是一個流某種特殊受體,也許是一個字符串 - 但在進一步調查中,我發現,「CMD」是一個具有各種數據和功能的整個班級。這完全困惑了我。爲什麼不代碼如下所示:
cmd.stringpart << '\n'
誰能告訴我這是怎麼回事,還是建議一篇文章給我看看。
更正: cmd是類的一個實例,而不是類本身。
請參閱運算符作爲函數:例如,3 + 4
調用一個採用兩個數字並返回它們的總和的二元函數。
在這裏,作者創建了這樣一個函數來定義運算符,以便它可以使用cmd類實例作爲左參數,並使用字符串作爲正確的參數。這被稱爲「操作員重載」。尋找運營商< <發生在您的代碼中。
這也可以是在CMD類的成員函數,取一個參數(靜止命名操作者< <)。
我第一次檢查,看看是否該cmd
的類的實例覆蓋<<
運營商 - 這將告訴你什麼是這個代碼怎麼回事。
檢查本課程中操作符重載 - 您應該在其名稱中尋找具有'< <'的函數。
聽起來像ostream運營商(< <)已被超載。在類定義中尋找一種名爲「operator < <」的方法。 C++允許程序員「重載」或重新定義運算符(包括+, - ,*,/,++, - 等)對類的處理方式。參考任何C++文本來討論這個問題。
在C++中,可以重載操作符。在這種情況下,它似乎被用來使某些Cmd類的行爲像一個流。
在許多語言,包括C++ 你被允許做什麼它被稱爲「運算符重載」
在你的代碼,如果你有例如,你反覆執行操作,一般用於清潔和更加便利着想代碼,你可以選擇一個現有的操作符(如 - ,+ =,==,<,<,>>),並在本地重新定義它,也就是說可以隨意使用它。
在某些情況下,您可以重寫操作符以在庫中創建所需的功能。例如: - 您創建了一個主要用於存儲信息塊的類。然後,您使用容器類(來自各種庫)來存儲您的類的實例。
Foo {
int a;
int b;
std::string c;
}
因此,通常每個容器類都有方法來處理存儲的實例,刪除,添加,比較(...)實例。比方說,你想比較富富與實例佑= FooContainer [0]存儲在與「==」中,一些庫會要求你反正重新定義,從而覆蓋「==」運算符,其中一些你的容器將承擔。例如,他們將返回true僅當(foo.a == woo.a & & foo.b == woo.b & & foo.c的== woo.c)是真實的。
嗯,也許兩個實例,是您使用相同的只有他們的「C」是一樣的,那麼你可以重寫「==」。你通常會在Foo中這樣做,就在構造函數下。它會類似於此:
bool operator==(const Foo &foo) const {return c == foo.c;}
底線:
希望它可以幫助..
你是說,cmd是一個類還是一個類的實例(即「經營者<<」被定義爲其中一些類型的變量)?如果是後者,應該有一個函數調用操作符<<(「鍵入cmd」,字符*)或類似的東西。我們可以看看嗎? – andand 2010-10-19 13:28:32
請參閱編輯至OP。 – Mick 2010-10-19 13:31:28