2017-05-02 199 views
-1

下面是我創建新用戶或新管理對象的代碼,具體取決於boolean isAdmin。用戶對象是管理員從此派生的基礎對象。我想能夠像用戶功能一樣用戶user->adminClasshere。我不知道如何更改它,以便用戶=新的管理員創建管理員而不是用戶。使用基類調用派生類

User *user; 

if (isAdmin) 
{ 
    user = new Admin(); 
} 
else 
{ 
    user = new User(userLib); //call constructor 

} 

//User User; 
user->loadLibrary(); 
user->displayLibrary(); 
+1

「新管理員」已創建管理員。也許你需要閱讀虛擬功能,但如果不知道你面臨的具體問題,很難確定。 –

+0

請注意,不應使用原始的新建和刪除,請閱讀std :: unique_ptr –

+0

請更清楚「user-> adminClasshere」的含義。你想訪問公共數據成員嗎?或者這是一個成員函數? –

回答

1

您正在將多態性與類擴展混合在一起。
在類擴展中,不能像使用已發現的那樣使用指向基類的指針來處理擴展類。
使用多態性,派生類具有相同的接口,但具有不同的實現,因此您可以調用基類的函數,並在使用虛函數時將它分派給實際類的函數。

解決方法是不要這樣做:如果你有一個管理員用戶,把它作爲一個單獨的用戶類型,不要假裝它只是一個普通的用戶有一些額外的功能。

不是一個解決方案,但一個解決方法是將用戶指針強制轉換爲所需的類型並使用新的指針。但是,只有在確實需要時才使用它。