私は基本クラスのポインタの配列を持っていると仮定します。 この配列に派生クラスオブジェクトポインタ(その基本クラスから派生したもの)を格納できますか?私はそれを逆にすることはできますか?派生オブジェクトポインタは、基本クラスポインタの配列に格納できますか?
-1
A
答えて
4
この配列に派生クラスオブジェクトポインタ(その基本クラスから派生したもの)を格納できますか?
はい。
私はそれを逆にすることはできますか?
号
あなたが持っていると言う:
struct Base
{
};
struct Derived1 : Base
{
};
struct Derived2 : Base
{
};
std::vector<Derived1*> ptrs;
Base* bPtr = new Derived2;
ptrs.push_back(bPtr); // Not allowed.
// If it were, imagine the problems.
// You have a Derived2* in the guise of a Derived1*
+0
私派生クラスに追加のパブリック関数があっても実行できますか? – Akra
+1
できます。ただし、派生クラスのメンバには、基本クラスのポインタを使用してアクセスすることはできません。派生したクラスメンバにアクセスするには、ポインタを最初に派生クラスのポインタにキャストする必要があります。 –
3
あなたが実際にBase*
の配列(またはそのことについてBase
ポインタの他のデータ構造)にDerived*
を保存することができます。
しかし、逆の場合は、Liskov Substitution Principleに違反しているため、真ではありません。
関連する問題
- 1. 基本クラスから派生クラスポインタへのstatic_castが無効です
- 2. 派生クラスを使用して基本クラスポインタのメモリを割り当てます。
- 3. g ++基本クラスのデストラクタと派生クラスポインタへの未定義の参照
- 4. 別の配列に配列を格納できますか?
- 5. C++の基本クラスポインタ、コレクションクラス
- 6. 継承 - 派生クラスの基本クラスデータメンバにアクセスできません
- 7. 基本クラスポインタからの変換コンストラクタ
- 8. 基本クラスのweak_ptrですが、shared_ptrは派生クラスですか?
- 9. C++は派生オブジェクトをマップ内に格納します
- 10. 利用派生クラス派生クラスは、基本クラス
- 11. 基本クラスにアクセスできない派生クラスのXmlInclude?
- 12. 基本クラスポインタから派生関数(オーバーライドされていない)を呼び出す
- 13. MemcacheにPHP配列を格納できますか?
- 14. JButtonを配列に格納できますか?
- 15. TQueueに配列を格納できますか?
- 16. 基本クラスの派生オブジェクトの参照
- 17. 派生クラスへの基本クラスのキャスト
- 18. が派生し、基本タイプの差別
- 19. 基本クラスの派生クラスオブジェクトを使用
- 20. 基本クラスと派生クラスのコンストラクタ
- 21. プライベート基本クラスメンバ変数を派生クラスで変更できますか?
- 22. 配列リストにデータを格納できませんか?
- 23. 基本オブジェクトを指す派生クラス参照を作成できますか
- 24. 配列をデータテーブルに格納
- 25. sharedpreferencesに配列を格納
- 26. 重複文字列を文字列配列に格納できますか?
- 27. は、クロージャ付きの関数の配列を格納します。
- 28. C++には、動的メモリ割り当てのない基本クラスポインタから派生クラスの完全コピーを作成するメカニズムがありますか?
- 29. スタイルプロパティをjs配列に格納することはできますか?
- 30. Node.jsオブジェクトをデータベースまたは配列に格納しますか?
なぜあなたはいくつかのコードを提供することによって実用的な質問をしませんか? – user463035818
これは大学の試験からの理論上の質問であり、コードは提供されていないためです。 – Akra
はい、 'std :: vector 'に 'Derived *'を格納できますが、その逆はできません。 –
ArchbishopOfBanterbury