2011-11-11 34 views
0

我有一個程序,我正在處理這個問題,它要求我們重載Employee類的>>,以便在使用它時讀入正確類型的員工,所以我有這樣的東西在我的主要程序:覆蓋派生類的>>運算符

Employee *emp; 
empIn >> emp; 

我想通了基類是在那裏我會想這樣做,因爲它是適用於所有的派生類中唯一的一個。該類型是通過在該行開始的整數確定的,所以我想這樣的事情可能工作(因爲我不知道是什麼類型,直到我讀它):

istream &operator >> (istream &stream, Employee &emp) 
{ 
    int type; 
    stream >> type; 
    switch(type){ 
     case 1: 
     *emp = new Hourly; 
     break; 
      ... 
    } 
    return stream; 
} 

但是,這不工作。我是以正確的方式去做這件事?如果沒有,請指出我的方向。

+1

當你說「它沒有?」時,你是什麼意思? – Maxpm

+1

這應該是'Employee *&emp' –

+0

它不起作用,它不會編譯 –

回答

1

如果您希望能夠像示例用法那樣指定指針,則您的istream函數的第二個參數應爲Employee* &emp。這個類型將會是一個指針的引用,這個指針可以讓你按照你想要的方式分配它,而不是方法。

2

問題似乎是,你混合了引用和指針。在operator>>函數中,您收到emp作爲參考,但將其作爲指針訪問,這是錯誤的。

對於整個工作,emp對象需要分配之前你嘗試輸入它。你不能在函數內分配它。

Employe emp; 
empIn >> emp; 

或者

Employe *emp = new Employe; 
empIn >> *emp; 

,當然還有,不要用new裏面的功能。

編譯器應該給你很多錯誤,你應該先看看他們說什麼。

+0

我沒有檢查錯誤,只是說'='沒有操作符匹配這些操作數。我沒有做Employee * emp = new Employee的原因是因爲我們的教授給出的.h文件有一個純虛函數來防止這種情況。所以,它必須被重載,以便它可以創建一個派生類的實例。 –