- ベストアンサー
C,C++,C++/CLIの構造体とクラス
C++の構造体・クラスって、メンバのアクセス指定子のデフォルトが privateかpublicかという違い「だけ」しか全くないのでしょうか? クラスにおける value class / ref class という分類はC++/CLIのもので これについては value class の方は C言語の構造体に近いという事でいいでしょうか? ref classの方は ネイティブのC++のクラスを マネージ用にしたようなもので C++/CLIの構造体は C++のそれと同じで OKですか? そしてそれらの構造体には、値型・参照型といった分類はないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> ということは、structも継承可、という事でしょうか? structでも継承可能です。 > 継承のアクセス指定の方は > クラスと構造体ではどうなるのでしょうか? class A : Base {}; は class A : private Base {}; と等価です。 一方、 struct A : Base {}; は struct A : public Base {}; と等価です。 > そして「集成体」というのが初めて知ったのですが > これはいわゆる、配列や・・・ある条件下でのクラス・・? > なのでしょうか? 配列と以下の条件をすべて満たすクラスのことです。 ・ユーザー定義のコンストラクタを持たない ・非公開または限定公開のメンバを持たない ・基底クラスを持たない ・仮想関数を持たない ちなみにC言語の集成体は、配列と構造体の総称です(共用体は集成体ではありません)。
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
> という言い方も出来るということですか? そうですが... > virtualの文字が見当たらない については、マクロで置換されている可能性もあるので、その部分だけを見て判断するのは危険です。 > ・ユーザー定義のコンストラクタを持たない > という部分は、どういう意味なのでしょうか…? > コンストラクタって、書かなくてもできましたっけ…?? クラスにコンストラクタをまったく定義しない場合、デフォルトコンストラクタとコピーコンストラクタが勝手に生成されます。
お礼
なるほど そういう意味では、確かにそうですね。 そして、コンストラクタについては 言われてみるとそういう文を見たことがあった気がしました。(いつも大抵いじってたので、すっかり忘れてました。) ありがとうございます。
- jacta
- ベストアンサー率26% (845/3158)
> C++の構造体・クラスって、メンバのアクセス指定子のデフォルトが > privateかpublicかという違い「だけ」しか全くないのでしょうか? C++では、構造体も共用体もクラスの一種です。 クラスキーがstructのものを「構造体」、unionのものを「共用体」と呼んでいるにすぎません。 クラスキーがclassのものとstructのもののでは、メンバのアクセス指定と継承のアクセス指定のデフォルトが異なります。 > value class の方は C言語の構造体に近いという事でいいでしょうか? どちらかといえば、C++の集成体に近いかも。 あとはメモリ管理の方法とか...。
お礼
ありがとうございます。 確認ですが value class の方は、アンマネージですよね? そして、 >クラスキーがstructのものを「構造体」、unionのものを「共用体」と呼んでいるにすぎません ということは、structも継承可、という事でしょうか? 継承のアクセス指定の方は クラスと構造体ではどうなるのでしょうか? そして「集成体」というのが初めて知ったのですが これはいわゆる、配列や・・・ある条件下でのクラス・・? なのでしょうか?
補足
「structも」→「ref structも」です。
お礼
なるほど♪ ありがとうございます。 え~っと、つまり… ・非公開または限定公開のメンバを持たない ↓ privateやprotectedを持たないつまり 全部public ・基底クラスを持たない ↓ 継承してない ・仮想関数を持たない ↓ virtualの文字が見当たらない という言い方も出来るということですか? そしてこの ・ユーザー定義のコンストラクタを持たない という部分は、どういう意味なのでしょうか…? コンストラクタって、書かなくてもできましたっけ…?? 「中身なし」って事でしょうか?