電子書籍の厳選無料作品が豊富!

お世話になります。

先日、C(C++もかな?)のベテランのプログラマの方が「構造体とクラスはまったく違うものだ」ときっぱり言い切っていらっしゃいました。私は、構造体にメソッドが加わったものがクラスだ、くらいな認識で、まったく違うものというよりはかなり近しい概念だと思っていたので少々驚いた次第です。

疑問が残りましたので、インターネットでいろいろ検索してみたのですが、おしなべて「構造体とクラスには共通点が多い」と説明されており、どうしても「まったく違うもの」と解釈できる文献を見つけることができませんでした。

果たして「構造体とクラスはまったく違うもの」なのでしょうか?

A 回答 (15件中11~15件)

↓で「宗教的」と書きましたが、もしかしたら特定の組織のコーディング規則ということもあるかもしれません。

もし、そのベテランプログラマの方が「われわれのコーディング規則では構造体とクラスは全く違うものとして扱うことになっている」という意味で言っておられたのなら、妥当な意見です。私もそうしています。「struct は c++の使えない環境でもそのまま動くことが保証された特別な書き方をした class とする」というコーディング規則は非常に有用ですから。
    • good
    • 0
この回答へのお礼

ありがとうございます。実際のコーディングのフェーズでそういった規則を定めて製造を行うというのは至極まっとうなことだと思いますが、そのときは原則論的な話だったので、疑問を持った次第であります。

お礼日時:2006/03/05 11:17

その、ベテランプログラマの方にはなんらかの宗教的な信念がおありでそのようなことを言っておられると思います。



基本的に class と struct は private か public かの状態が class ではディフォルトが private、struct では public になっているというだけしか違いはありません。メンバーを宣言するときに必ず public とか private からはじめるようにすれば class と struct は入れ替え可能です。

とはいえ、私自身 struct を使うのは c 文法でしか使わないものにしか使いません。struct でメンバ関数とか継承を使うのは、かなり「変わった書き方」という印象を与えますから。しかし、文法的には問題ないと思います。

ですからといって「まったく違うものだ」というのは、宗教的な信念であるとしか思えません。
    • good
    • 0

著者へC++言語を作った人→著者の一人はC++言語の設計者

    • good
    • 1

The Annotated Reference Manual


「注解C++リファレンスマニュアル」(初版)
によると
構造体,デフォルトのアクセス制限の存在しないクラス
とありますので、(著者へC++言語を作った人)
C++においては、
構造体は、クラスの特別な形のもの
という認識でいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。クラスとは、構造体の構成要素(メンバ)及び構造体自身に可視性を定義できることにより、オブジェクトとしての(型としての?)安全性を高めた構造体とも言えるということでしょうかね。

お礼日時:2006/03/05 11:13

クラスの概念を実装するのに構造体を利用した、というのだと思います。

構造体+メソッドとして関数などを追加していますよね。実際、クラスの概念には他に継承や多態性などもありますので、構造体とクラスがかならずしも共通点が多いという事ではないです。
まあ、構造体をクラスであらわす事ができるのでそういう考え方もありますが、オブジェクト指向としてクラスという概念を考えると違う点もあります。また、プログラム的に考えたとしても参照渡しか値渡しかという違いもありますね。
    • good
    • 0
この回答へのお礼

ありがとうございました。Cにおける構造体はabstract宣言できないんですよね。そういう点でクラスと構造体は違うなあということはよく理解できます。

お礼日時:2006/03/05 11:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!