![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
先日、C(C++もかな?)のベテランのプログラマの方が「構造体とクラスはまったく違うものだ」ときっぱり言い切っていらっしゃいました。私は、構造体にメソッドが加わったものがクラスだ、くらいな認識で、まったく違うものというよりはかなり近しい概念だと思っていたので少々驚いた次第です。
疑問が残りましたので、インターネットでいろいろ検索してみたのですが、おしなべて「構造体とクラスには共通点が多い」と説明されており、どうしても「まったく違うもの」と解釈できる文献を見つけることができませんでした。
果たして「構造体とクラスはまったく違うもの」なのでしょうか?
No.5
- 回答日時:
↓で「宗教的」と書きましたが、もしかしたら特定の組織のコーディング規則ということもあるかもしれません。
もし、そのベテランプログラマの方が「われわれのコーディング規則では構造体とクラスは全く違うものとして扱うことになっている」という意味で言っておられたのなら、妥当な意見です。私もそうしています。「struct は c++の使えない環境でもそのまま動くことが保証された特別な書き方をした class とする」というコーディング規則は非常に有用ですから。ありがとうございます。実際のコーディングのフェーズでそういった規則を定めて製造を行うというのは至極まっとうなことだと思いますが、そのときは原則論的な話だったので、疑問を持った次第であります。
No.4
- 回答日時:
その、ベテランプログラマの方にはなんらかの宗教的な信念がおありでそのようなことを言っておられると思います。
基本的に class と struct は private か public かの状態が class ではディフォルトが private、struct では public になっているというだけしか違いはありません。メンバーを宣言するときに必ず public とか private からはじめるようにすれば class と struct は入れ替え可能です。
とはいえ、私自身 struct を使うのは c 文法でしか使わないものにしか使いません。struct でメンバ関数とか継承を使うのは、かなり「変わった書き方」という印象を与えますから。しかし、文法的には問題ないと思います。
ですからといって「まったく違うものだ」というのは、宗教的な信念であるとしか思えません。
No.2
- 回答日時:
The Annotated Reference Manual
「注解C++リファレンスマニュアル」(初版)
によると
構造体,デフォルトのアクセス制限の存在しないクラス
とありますので、(著者へC++言語を作った人)
C++においては、
構造体は、クラスの特別な形のもの
という認識でいいと思います。
ありがとうございます。クラスとは、構造体の構成要素(メンバ)及び構造体自身に可視性を定義できることにより、オブジェクトとしての(型としての?)安全性を高めた構造体とも言えるということでしょうかね。
No.1
- 回答日時:
クラスの概念を実装するのに構造体を利用した、というのだと思います。
構造体+メソッドとして関数などを追加していますよね。実際、クラスの概念には他に継承や多態性などもありますので、構造体とクラスがかならずしも共通点が多いという事ではないです。まあ、構造体をクラスであらわす事ができるのでそういう考え方もありますが、オブジェクト指向としてクラスという概念を考えると違う点もあります。また、プログラム的に考えたとしても参照渡しか値渡しかという違いもありますね。
ありがとうございました。Cにおける構造体はabstract宣言できないんですよね。そういう点でクラスと構造体は違うなあということはよく理解できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 西洋の教会の鐘で巨大な鐘を揺らして鳴らすのは、物理的にどんなメリットがあるの? 9 2022/12/13 08:46
- 哲学 説得力を修辞の巧みさまたは論理の強さの2つに分析するにはどうすると良いでしょうか? 0 2022/07/20 05:46
- 化学 構造式とは(ジエチルエーテル) 3 2022/11/24 11:11
- 薬学 血液脳関門の担体による通過と単純拡散による通過について教えてください 1 2022/06/29 17:32
- その他(パソコン・スマホ・電化製品) 人間の長期記憶に関するモデルについて。 下記の内容をもとに、一番下の質問の具体例が思いつく方いたら具 1 2023/06/30 18:21
- 友達・仲間 友人について 厳しい意見お待ちしております。 私は結構わがままだししつこいしプライドが高いという自己 3 2022/11/17 16:26
- 一戸建て 耐震性、工法について質問させていただきます。 現在、3階建てを計画しています。検討していく中で、se 2 2022/10/08 11:09
- 哲学 非構造主義 1 2023/04/06 16:02
- 化学 大学化学について質問です。専攻されている方、わかる方いる人いたら教えていただけると嬉しいです。 エチ 1 2022/05/10 11:30
- 英語 ソシュール言語観による品詞、単語、辞書理解の誤り 4 2022/11/24 12:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
包丁の切れ味
-
UMLのクラス図はmain()も含むん...
-
java eclipse 型に解決できません
-
新規契約でUQモバイル申し込も...
-
重複エラーを解決するには
-
複数のクラスで共通した関数を...
-
進学校通ってたんですけど、眼...
-
クラスの打ち上げって、なぜク...
-
クラスにアクセスできません。
-
配列の重複する値とその個数を...
-
IPアドレスのクラスAを取得して...
-
main()を持つクラスが2つ以上...
-
グローバルIPとプライベートIP...
-
VC++ MFCButton マウスが通過す...
-
CImageクラスをVisualC++6.0で...
-
USBデバイスのクラスID
-
どこからも呼ばれていない無意...
-
A・B・Cクラスとは?
-
エクセルVBAでのwitheventsにつ...
-
クラスのプロパティに構造体を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の重複する値とその個数を...
-
「天声人語」をインターネット...
-
java eclipse 型に解決できません
-
グローバルIPとプライベートIP...
-
ポータブル電源を買おうと思う...
-
容姿について
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
UMLのクラス図はmain()も含むん...
-
同一パッケージにあるクラスが...
-
main()を持つクラスが2つ以上...
-
1 つのヘッダファイルに複数の...
-
アルキメデスの大戦の櫂はなぜ2...
-
dllと同じプロジェクトにする方法
-
IPアドレスの3バイト目の呼び方
-
3年間同じクラスになる確率
-
重複エラーを解決するには
-
同じパッケージ、クラス名が含...
-
コンボボックスのマウスホイー...
-
同じクラスにならない確率を教...
おすすめ情報