2010-10-19 119 views
4

我正在學習C++的過程中,以瞭解我已經給出的一些開源代碼。C++初學者問題

我通過管道傳來如下:

cmd << '\n' 

我以爲,「CMD」必須是一個流某種特殊受體,也許是一個字符串 - 但在進一步調查中,我發現,「CMD」是一個具有各種數據和功能的整個班級。這完全困惑了我。爲什麼不代碼如下所示:

cmd.stringpart << '\n' 

誰能告訴我這是怎麼回事,還是建議一篇文章給我看看。

更正: cmd是類的一個實例,而不是類本身。

+1

你是說,cmd是一個類還是一個類的實例(即「經營者<<」被定義爲其中一些類型的變量)?如果是後者,應該有一個函數調用操作符<<(「鍵入cmd」,字符*)或類似的東西。我們可以看看嗎? – andand 2010-10-19 13:28:32

+0

請參閱編輯至OP。 – Mick 2010-10-19 13:31:28

回答

4

請參閱運算符作爲函數:例如,3 + 4調用一個採用兩個數字並返回它們的總和的二元函數。

在這裏,作者創建了這樣一個函數來定義運算符,以便它可以使用cmd類實例作爲左參數,並使用字符串作爲正確的參數。這被稱爲「操作員重載」。尋找運營商< <發生在您的代碼中。

這也可以是在CMD類的成員函數,取一個參數(靜止命名操作者< <)。

4

我第一次檢查,看看是否該cmd的類的實例覆蓋<<運營商 - 這將告訴你什麼是這個代碼怎麼回事。

2

檢查本課程中操作符重載 - 您應該在其名稱中尋找具有'< <'的函數。

2

聽起來像ostream運營商(< <)已被超載。在類定義中尋找一種名爲「operator < <」的方法。 C++允許程序員「重載」或重新定義運算符(包括+, - ,*,/,++, - 等)對類的處理方式。參考任何C++文本來討論這個問題。

7

在C++中,可以重載操作符。在這種情況下,它似乎被用來使某些Cmd類的行爲像一個流。

0

在許多語言,包括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;} 

底線:

  • 如果你不能讓意義上的操作,你可能想看看技術指南是否存在。如果沒有,去頭文件,重寫類等,探索覆蓋運營商深入的代碼之前。
  • 您也想熟悉他們自己,因爲(a)你可能在某些情況下使用,(B),它可能給你想要的超輕鬆的功能,(C),它可以讓你的代碼乾淨和簡單。

希望它可以幫助..