2017-05-02 19 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

'new Admin'はすでに管理者を作成しています。多分あなたは仮想関数を読む必要がありますが、あなたが直面している正確な問題を知ることなく確実に伝えるのは難しいでしょう。 –

+0

raw newとdeleteを使用しないでください。std :: unique_ptrについて読むこと –

+0

「user-> adminClasshere」とは何かを明確にしてください。パブリックデータメンバーにアクセスしますか?またはこれはメンバー関数ですか? –

答えて

1

多態性をクラス拡張と混同しています。
クラス拡張では、既に見つかったような拡張クラスを扱うための基本クラスへのポインタを使用できません。
多態性を使用すると、派生クラスは同じインターフェイスを持ちますが実装が異なります。したがって、基本クラスの関数を呼び出すだけで、仮想関数を使用する場合は実際のクラスの関数にディスパッチされます。

解決策はありません。管理ユーザーがいる場合は、それを別の種類のユーザーとして扱い、いくつかの特別な機能を持つ通常のユーザーであるとは思わないでください。

解決策ではありませんが、回避策は、ユーザーポインタを必要な型にキャストし、新しいポインタを使用することです。ただし、実際に必要な場合にのみ使用してください。

関連する問題