お世話になります。VC++6.0(SP4)Win2000ユーザーですが
タイトルのとおり、単なるstructをtypedef名前定義したものまで
クラスビューのクラス一覧の中に入っています。
気にしなければ、動作とか特に問題が起こってはいないんですが
やっぱクラスでないものが、みなされてると、気持ち悪いですし
なるべくきっちりさせときたいので、この現象?について
何かお心当たりありましたら、ご助言下さい。
よろしくお願い致します。
> タイトルのとおり、単なるstructをtypedef名前定義したものまで
> クラスビューのクラス一覧の中に入っています。
> 気にしなければ、動作とか特に問題が起こってはいないんですが
> やっぱクラスでないものが、みなされてると、気持ち悪いですし
> なるべくきっちりさせときたい
VC.NET2002のクラスビューでは、typedefで定義された名前は、そうでないクラス名とは
異なったアイコンで表示がされます。
VC++6.0はPCから削除してしまったのでどうだったか確認できませんが、プログラムの内
容に関係があるのはソースコードだけですから、コードさえきっちりとしていれば、単
なるツールであるクラスビューにどう表示されようと気になさらなくてよいと思いま
す。
C++では、structキーワードで定義されたものは、メンバのアクセス指定がデフォルトで
publicの「クラス」ですから、その名前がクラス一覧にあっても一向に構わないとも言
えます。
想像になりますが、VC++を設計した人たちは、typedef名であっても、structで定義され
たものであっても、クラス名が一覧できたほうが便利だと考えたのではないでしょう
か。
お話しだけですが
秀和システム 「図解・標準 最新C++ ハンドブック」と言う本の
161ページ(2-10-2 構造体・共用)と言う節に
「クラスと99%同じ機能を持ってます」と言う一文があります
デフォルトは、PUBLICになるそうです
上記のとおり、Structの中に変数のほか、関数宣言も出来るそうです
実際、試してみてませんが、クラス宣言と同等に扱われてしまい、表示されてしまう
のではないでしょうか
より、経験のある方の回答をお待ちください
monkey様、wood様、レスありがとうございます。
>C++では、structキーワードで定義されたものは、メンバのアクセス指定が
>デフォルトでpublicの「クラス」ですから、その名前がクラス一覧にあっても
>一向に構わないとも言えます。
>「クラスと99%同じ機能を持ってます」と言う一文があります
>デフォルトは、PUBLICになるそうです
>上記のとおり、Structの中に変数のほか、関数宣言も出来るそうです
>実際、試してみてませんが、クラス宣言と同等に扱われてしまい
>表示されてしまうのではないでしょうか
なるほど、structがクラスとみなされているのではなくて、publicの
クラスでもあるのなら、自分は当たり前のことが気になってたわけですね?^^;
それなら納得もできます。ありがとうございました。
規格書(ISO/IEC 14882)では、9.Classes の 4 で
A *structure* is a class defined with the *class-key* struct;
its members and base class are public by default.
と書かれています。
> publicの
クラスでもあるのなら
構造体は struct というクラスキーワードで定義されるクラスであり、
そのメンバと基底クラスはデフォルトで public である。
なるほど、完全にstruct=クラスと覚え直します。^^;
Ban様、レスありがとうございました。
あの、気になったのでひとつ。
struct(レコード構造) が kind of クラスなのは C++ の実装がそうだからであって、
オブジェクト指向言語一般の話ではないことに注意されたほうが良いと思います。
→クラスって構造体の便利になったものでしょ? みたいな話をたまに見るように思う
ので。
例えば、C 言語をベースにオブジェクト指向化した言語として C++ のほかに Objective-C
がありますが、こちらでは class と struct とは文法上も概念上もまったく
違うものとして扱われています。
以上、おせっかいかもしれませんが・・・
C#もそうですね。structとclassは別物。
当然 C++ の場合だと思って書いてましたが、
言われてみれば誤解を与えかねない説明でした。
フォローありがとうございます。
# 私も、両者が同一に扱われるのは C++ くらいしか知らないです。