我試圖創建這些類的對象,我在主得到一個錯誤()在這條線:多態性錯誤C++
employee1->employeeId(29);
錯誤只是說,「僱員設爲保護「,但是這應該工作。所有的幫助表示讚賞THX :)
這裏是我下面的代碼:
代碼刪除*
我試圖創建這些類的對象,我在主得到一個錯誤()在這條線:多態性錯誤C++
employee1->employeeId(29);
錯誤只是說,「僱員設爲保護「,但是這應該工作。所有的幫助表示讚賞THX :)
這裏是我下面的代碼:
代碼刪除*
那麼編譯器是正確的,employeeId
保護。你確定你不是故意用setEmployeeId
代替嗎?
例如
employee1->setEmployeeId(29);
是的,它是受保護的,所以你不能從main
只能從派生類的方法來訪問它。而且你不能將它用作函數:employee1->employeeId(29);
它是一個int類型的成員變量。
受保護意味着只有派生類(子類)才能看到該成員。派生類的用戶無法看到它,就像父類的用戶無法看到它一樣。在繼承中使用「公開」不會改變所有成員的保護,但會控制父母對用戶和/或孩子的保護。
這裏的另一個線程與相關信息: Difference between private, public, and protected inheritance
如這裏一般的經驗法則,你不應該使用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;
}
謝謝:)我雖然是這樣的。 – user3072131