2012-11-12 66 views
3

我有一個包含此C++編寫自己的輸入操縱

Map2D, [3, 2] 
Dot3D, [25, -69, -33], [-2, -41, 58] 
Map3D, [6, 9, -50] 
Map2D, [3, 2] 
Dot3D, [7, -12, 3], [9, 13, 68] 
Map3D, [6, 9, 5] 
Map2D, [3, 2] 
Dot3D, [70, -120, -3], [-29, 1, 268] 
Dot3D, [7, 12, 3], [-9, 13, 68] 
Map3D, [1, 3, 8] 
Dot2D, [5, 7], [3, 8] 

基本上文本文件第一數據的數據文本文件的類名,我得到了4類

Map2D 
Map3D 
Dot2D 
Dot3D 

我試圖寫我自己的文件操作器,以便我的程序可以提取上面的數據,併爲4個類中的每一個重載提取操作符>>,然後將其存儲到相關對象中。

我正在考慮使用矢量,地圖,集或列表來存儲。但爲此,我該如何實現我想要做的事情,比如存儲到課程的相關對象中。

我試着用google搜索如何創建自己的文件操縱器,但是如果有人能夠給我看一些示例代碼,並且我可以在測試文件中編譯並執行它,然後觀察輸出結果,那麼這樣做會很好。我想使用iomanip在>>運營商

超負荷,我很抱歉造成的一切麻煩。我也可以不使用數組來實現以下存儲數據。

我,因爲我需要創造這樣

我需要做的是這樣

cout << "Input File Name"; 
cin >> readFile; 

,並執行所有數據讀取&對象創建

那麼它會讀取使用機械手逐行記錄,然後創建類以及其中的數據。

感謝您的幫助!

+1

我沒有得到的部分是爲什麼你需要編寫一個操縱器。操縱器通常用於修改流狀態。據我所見,你所需要做的就是爲你的四個類中的每一個重載'operator >>'。第二個問題的答案可能與使用多態性一樣簡單。 – john

+0

@john,感謝您的幫助。我明白,但認真我嘗試谷歌周圍,並沒有機會我明白如何做到這一點。我對其他編程語言很好,但是這個操作器的東西,你能給我一些示例代碼,比如我如何用這個類的一個完成這個。我知道我不應該這樣問。但它真的會非常流行。再次感謝! – user1818620

+0

你似乎需要的不是文件操作符,而是簡單的解析器。我建議你只需要一個解析器對象,它一次讀取一行文件,解析第一個單詞,並基於第一個單詞實例化適當類的對象。如果數據文件的語法不符合您的期望,那麼這樣一個簡單的解析器也會使錯誤陷印更容易。 – Fred

回答

-1

你可以使用迭代器最明顯的形式是一個指針:指針可以指向數組中的元素,並且可以使用遞增運算符(++)遍歷它們。但是其他形式的迭代器存在。例如,每個容器類型(如向量)都有一個特定的迭代器類型,用於以有效的方式遍歷其元素。

+0

我想使用地圖或設置或列表以外的矢量。但問題是如何開始做這個操縱器真的很難。 – user1818620

+1

爲什麼要使用操縱器只使用矢量它是一個模板,並且使用它非常簡單,您只需要瞭解迭代器的想法並更好地從矢量中提取任何信息然後創建操縱器 –

+0

我需要做一些事情像cout <<「Input File Name」; cin >> readFile;並執行所有的數據讀取和對象創建 – user1818620

1

這是抽象工廠模式的一個非常典型的例子。

你不會使用iomanip來做到這一點。讀取第一個單詞,然後找到適當的處理程序並調用它來讀取(解析)該行的其餘部分並創建適當的對象。

對象本身不需要協變,工廠用來創建它們應該是。

當然,如果你想將它們都存儲在一個集合中,你將不得不解決你想要如何管理它。

如果你在一個你不知道的「標題」中讀到,你當然會失敗。

+0

如果我想使用它與iomanip,它仍然有可能實現。 – user1818620