単なるtypedef定義したstructの名前がクラスビューにあります。 – プログラミング – Home

単なるtypedef定義したstruc...
 
通知
すべてクリア

[解決済] 単なるtypedef定義したstructの名前がクラスビューにあります。


カノン
 カノン
(@カノン)
ゲスト
結合: 20年前
投稿: 22
Topic starter  

お世話になります。VC++6.0(SP4)Win2000ユーザーですが
タイトルのとおり、単なるstructをtypedef名前定義したものまで
クラスビューのクラス一覧の中に入っています。
気にしなければ、動作とか特に問題が起こってはいないんですが
やっぱクラスでないものが、みなされてると、気持ち悪いですし
なるべくきっちりさせときたいので、この現象?について
何かお心当たりありましたら、ご助言下さい。
よろしくお願い致します。


引用未解決
トピックタグ
monkey
 monkey
(@monkey)
ゲスト
結合: 21年前
投稿: 70
 

> タイトルのとおり、単なるstructをtypedef名前定義したものまで
> クラスビューのクラス一覧の中に入っています。
> 気にしなければ、動作とか特に問題が起こってはいないんですが
> やっぱクラスでないものが、みなされてると、気持ち悪いですし
> なるべくきっちりさせときたい

VC.NET2002のクラスビューでは、typedefで定義された名前は、そうでないクラス名とは
異なったアイコンで表示がされます。
VC++6.0はPCから削除してしまったのでどうだったか確認できませんが、プログラムの内
容に関係があるのはソースコードだけですから、コードさえきっちりとしていれば、単
なるツールであるクラスビューにどう表示されようと気になさらなくてよいと思いま
す。

C++では、structキーワードで定義されたものは、メンバのアクセス指定がデフォルトで
publicの「クラス」ですから、その名前がクラス一覧にあっても一向に構わないとも言
えます。
想像になりますが、VC++を設計した人たちは、typedef名であっても、structで定義され
たものであっても、クラス名が一覧できたほうが便利だと考えたのではないでしょう
か。


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

お話しだけですが
秀和システム 「図解・標準 最新C++ ハンドブック」と言う本の
161ページ(2-10-2 構造体・共用)と言う節に
「クラスと99%同じ機能を持ってます」と言う一文があります

デフォルトは、PUBLICになるそうです
上記のとおり、Structの中に変数のほか、関数宣言も出来るそうです

実際、試してみてませんが、クラス宣言と同等に扱われてしまい、表示されてしまう
のではないでしょうか

より、経験のある方の回答をお待ちください


返信引用
カノン
 カノン
(@カノン)
ゲスト
結合: 20年前
投稿: 22
Topic starter  

monkey様、wood様、レスありがとうございます。

>C++では、structキーワードで定義されたものは、メンバのアクセス指定が
>デフォルトでpublicの「クラス」ですから、その名前がクラス一覧にあっても
>一向に構わないとも言えます。

>「クラスと99%同じ機能を持ってます」と言う一文があります
>デフォルトは、PUBLICになるそうです
>上記のとおり、Structの中に変数のほか、関数宣言も出来るそうです

>実際、試してみてませんが、クラス宣言と同等に扱われてしまい
>表示されてしまうのではないでしょうか

なるほど、structがクラスとみなされているのではなくて、publicの
クラスでもあるのなら、自分は当たり前のことが気になってたわけですね?^^;
それなら納得もできます。ありがとうございました。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

規格書(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 である。


返信引用
カノン
 カノン
(@カノン)
ゲスト
結合: 20年前
投稿: 22
Topic starter  

なるほど、完全にstruct=クラスと覚え直します。^^;

Ban様、レスありがとうございました。


返信引用
karabiner
 karabiner
(@karabiner)
ゲスト
結合: 21年前
投稿: 5
 

あの、気になったのでひとつ。

struct(レコード構造) が kind of クラスなのは C++ の実装がそうだからであって、
オブジェクト指向言語一般の話ではないことに注意されたほうが良いと思います。

 →クラスって構造体の便利になったものでしょ? みたいな話をたまに見るように思う
ので。

例えば、C 言語をベースにオブジェクト指向化した言語として C++ のほかに Objective-C
がありますが、こちらでは class と struct とは文法上も概念上もまったく
違うものとして扱われています。

以上、おせっかいかもしれませんが・・・


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

C#もそうですね。structとclassは別物。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

当然 C++ の場合だと思って書いてましたが、
言われてみれば誤解を与えかねない説明でした。
フォローありがとうございます。

# 私も、両者が同一に扱われるのは C++ くらいしか知らないです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました