
お世話になります。
先日、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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java eclipse 型に解決できません
-
複数のクラスで共通した関数を...
-
Cstring(日本語含む)をcharに...
-
IPアドレスのクラスAを取得して...
-
そんなにお金がなくても年に1度...
-
EclipseでJSPのコンパイルエラー
-
どこからも呼ばれていない無意...
-
同一パッケージにあるクラスが...
-
恋愛
-
eclipse でクラスに色
-
進学校通ってたんですけど、眼...
-
JSPからJavaクラスを参照できな...
-
C#で OpenSSLで3DES
-
命名規約は連番でいいのか?
-
標準モジュールとクラスモジュ...
-
エクセルVBAでのwitheventsにつ...
-
IPアドレスの3バイト目の呼び方
-
VBAもしくはVB6:クラスの中で...
-
ドキュメントクラスの取得方法
-
string formatについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
僕の出身中学校は200人同級生が...
-
今日は こどもの日 で、良い天...
-
どこからも呼ばれていない無意...
-
そんなにお金がなくても年に1度...
-
中学生です。 私は教室の黒板に...
-
恋愛
-
EclipseでJSPのコンパイルエラー
-
java eclipse 型に解決できません
-
共通で使う関数を集めたクラス...
-
main()を持つクラスが2つ以上...
-
同一パッケージにあるクラスが...
-
配列の重複する値とその個数を...
-
「隣の芝生は青く見える」現象...
-
重複エラーを解決するには
-
UMLのクラス図はmain()も含むん...
-
複数のクラスで共通した関数を...
-
VBAもしくはVB6:クラスの中で...
-
命名規約は連番でいいのか?
-
eclipse でクラスに色
-
3年間同じクラスになる確率
おすすめ情報