質問は本当にすべてそれを言う。私は構造体からクラスを派生させることができましたか、または私の構造体を埋め込むクラスを作成し、コピーコンストラクタとその2つの間を移動する=演算子を定義する必要がありますか?C++では、構造体からクラスを派生させることができます
答えて
C++ struct
はclass
と同義です(デフォルトのアクセスレベルは異なります)。
struct A {
// fields are public by default
};
class B: public A {
// fields are private by default
};
私はMFCに精通していませんが、CとC++ APIの両方を維持しようとしているようです。
ありがとう。私はそれが大丈夫だったとはかなり確信していましたが、実際には実際にはそれを見たことはありませんでした –
もちろんです。継承に関して異なる点は、クラスを定義すると、他のクラス/構造体からプライベートを継承するということです。私はクラスにメンバーとしてそれらを組み込むだろう - あなたはCの構造体をラップする方法を疑問に思う場合
// the following two are equivalent except that one time class is
// used and the other time struct
struct f : g { };
class f : public g { };
:あなたは構造体を定義し、クラスまたは構造体からそれを引き出す場合は、デフォルトでは、パブリック継承されます。 C構造体は継承されるようには設計されていないため(C構造体の保護されていない仮想デストラクタを考慮していないので、それらを持つことはできません)。それらはデータを収集する単純な集約です。そして、それらをメンバーとして使うことは、(「ある点にxとy座標のペアがある」のように)それらを使用します。
C structでは、クラス内で公開されるべきではないメンバーも公開します。包含は、公開されているものと取得/設定されていないものを正確に制御することができます。また、含まれている裸のC構造体オブジェクトへのコピーや参照を与えることができます。
はい。構造体からクラスを派生させることができます。 C++では、structは単なるクラスであり、デフォルトのアクセスはprivateではなくpublicです。非virualメンバ関数および/または静的関数のみを追加するクラスから構造体を派生させることは、CスタイルのAPIとの互換性を維持しながらC++インターフェイスを提供するのに便利なテクニックです。
これは、(あなたの質問に記載されているものとは反対に)多くのC構造体でMFCが使用する手法とまったく同じです。
たとえば、CRectクラスはstruct tagRECTから一般に派生しています(より一般的に使用される名前RECTはstruct tagRECTのtypedfです)。 struct tagRECTはすべてのデータメンバーを定義し、CRectは非仮想メンバ関数のみを追加するため、CRectとRECTのメモリレイアウトは同じです。CRECTを想定した関数の引数としてCRectを使用できます。
- 1. 派生構造体と親構造体へのC++キャスト
- 2. Cプログラミング - ベース構造体型「派生」タイプ
- 3. 構造体から派生したクラスの仮想関数
- 4. なぜ構造体を別の構造体から派生できないのですか?
- 5. 構造体とクラスCではC++
- 6. 派生クラスのフィールドも派生させることは可能ですか?
- 7. C#クラスと構造体
- 8. 派生クラスからクラスを派生させる
- 9. バイナリファイルから構造体を読み取ることができません
- 10. は、派生クラスから基底クラスで保護されたメンバにアクセスすることはできません
- 11. 構造体またはクラスを汎用プロトコルに複数回適合させることはできますか?
- 12. Class :: Type型の場合、constクラス:: Typeからconstクラスを派生させることはできますか?
- 13. CとC++でこの構造体は何ですか
- 14. C++:構造体へのポインタを返すことができません
- 15. 構造体の内部構造体を変更することはできませんか?
- 16. C - 私は構造体を宣言することができます
- 17. C#クラスにC++構造体をマーシャリングするときのAccessViolationException
- 18. C構造体をCocoaのNSKeyedArchiverにパックすることはできますか?
- 19. CクラスのPanelクラスからクラスを派生させようとしたときにエラーが表示される
- 20. C構造体 - 構造体変数を他の構造体変数に割り当てることができません
- 21. 構造体とクラスと継承(C++)
- 22. ライティング/ Iは、以下の構造体を持っていると言うことができます構造体
- 23. C++で深さの派生クラスとは何ですか?
- 24. 構造体の構造体とオブジェクトは、クラス内でどこに属していますか?
- 25. C++:メンバー構造体をクラスからクラスへアクセスするための構文
- 26. クラス/構造体の中にクラス/構造体を置くことは、実際には "法的"かUSEDか?
- 27. `Phone`はC#のクラスか構造体ですか?
- 28. コンパイラは、派生クラスでシャドーされたベース構造体のメンバ変数について警告を出すべきではありませんか?
- 29. 親クラスの代入演算子は、派生クラスからアクセスすることはできませんなぜ
- 30. cでリンクされたリスト、構造体の構造体、セグメンテーションフォールト
MFCのクラスCRectは、struct tagRECT、AFAICSから継承しています。 – Constantin
質問の文章が変わった。 –