2014-04-04 43 views
-2

我試圖創建這些類的對象,我在主得到一個錯誤()在這條線:多態性錯誤C++

employee1->employeeId(29); 

錯誤只是說,「僱員設爲保護「,但是這應該工作。所有的幫助表示讚賞THX :)

這裏是我下面的代碼:

代碼刪除*

回答

2

那麼編譯器是正確的,employeeId保護。你確定你不是故意用setEmployeeId代替嗎?

例如

employee1->setEmployeeId(29); 
+0

謝謝:)我雖然是這樣的。 – user3072131

0

是的,它是受保護的,所以你不能從main只能從派生類的方法來訪問它。而且你不能將它用作函數:employee1->employeeId(29);它是一個int類型的成員變量。

0

受保護意味着只有派生類(子類)才能看到該成員。派生類的用戶無法看到它,就像父類的用戶無法看到它一樣。在繼承中使用「公開」不會改變所有成員的保護,但會控制父母對用戶和/或孩子的保護。

這裏的另一個線程與相關信息: Difference between private, public, and protected inheritance

0

如這裏一般的經驗法則,你不應該使用set方法簡單地返回數據 - 文體上來講,這應該是getId(); 您的設置者應該實際設置數據。但是再一次,它看起來像你父母已經有了一個setter,所以添加一個getter並從你的孩子中刪除所有東西。

只要遵循這種風格,你的班級可以被清理一下。

class Employees{ 
    protected:  
     int employeeId; 
     //string name; 
    public:   
     void setEmployeeId(int a) 
     { employeeId = a; }  
     int getEmployeeId() 
     { return employeeId; }  
}; 

class cashier: public Employees{ 
    public: 
    // no need for anything here -- the methods you need are inherited 
}; 

int main(){ 
    cashier c;  
    c.setEmployeeId(29); 
    cout << "Employee ID: " << c.getEmployeeId() << endl; 
}