質問は本当にすべてそれを言う。私は構造体からクラスを派生させることができましたか、または私の構造体を埋め込むクラスを作成し、コピーコンストラクタとその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. 構造体から派生したクラスの仮想関数
- 3. なぜ構造体を別の構造体から派生できないのですか?
- 4. 構造体とクラスCではC++
- 5. C#クラスと構造体
- 6. 派生クラスからクラスを派生させる
- 7. は、派生クラスから基底クラスで保護されたメンバにアクセスすることはできません
- 8. C - 私は構造体を宣言することができます
- 9. CクラスのPanelクラスからクラスを派生させようとしたときにエラーが表示される
- 10. C#クラスにC++構造体をマーシャリングするときのAccessViolationException
- 11. C構造体をCocoaのNSKeyedArchiverにパックすることはできますか?
- 12. 構造体とクラスと継承(C++)
- 13. C++で深さの派生クラスとは何ですか?
- 14. g_timeout_addに構造体を渡すことはできませんか?
- 15. 親クラスの代入演算子は、派生クラスからアクセスすることはできませんなぜ
- 16. C++:メンバー構造体をクラスからクラスへアクセスするための構文
- 17. 構造体に格納されるときに割り当てられるクラスはどこですか?
- 18. ツリー構造はいつクラス/構造体になるべきですか?
- 19. は、構造体のインスタンスフィールドイニシャライザを持つことができません。
- 20. MonoTouchバインディングobjcライブラリの問題(バインドされたobjcクラスから派生することはできません)
- 21. 抽象クラスのメンバは、派生クラスで設定された値にアクセスすることはできません
- 22. 構造体またはクラスとパブリックデータはどうですか?
- 23. 派生クラスが全体のベースコンストラクタを呼び出さない派生クラス
- 24. C#構造体変数の値を保持できません
- 25. 他の構造体から派生した構造体を初期化することができないのはなぜですか?私はこのコードを実行すると
- 26. 関数から構造体を返すときに問題が発生する
- 27. のemacs:クラスと構造体
- 28. 構造体からCのフィールドをプリントできない
- 29. ostream ::構造体全体が書き込まれませんか?
- 30. クラスまたはnullable構造体を返すことができるジェネリックコレクション検索メソッドを実装する方法?
MFCのクラスCRectは、struct tagRECT、AFAICSから継承しています。 – Constantin
質問の文章が変わった。 –