web-dev-qa-db-ja.com

C ++-構造体とクラス

可能な重複:
C/C++ Struct vs Class
C++のPODタイプとは

こんにちは、

C++ In Nutshell book、inchapter 6:classes、 undersアクセス指定子、以下に言及:

クラス定義では、メンバーおよび基本クラスのデフォルトアクセスはプライベートです。構造体の定義では、デフォルトはパブリックです。 これがクラスと構造体の唯一の違いですが、慣例により、一部のプログラマーはPOD classesおよびclass =を他のすべてのクラスに使用します

私の質問は次のとおりです。

  • 構造体は関数を保持せず、データを保持するという点で、クラスと構造体の間に別の違いはありませんか?
  • PODクラスとは何ですか?そして、他のすべてのクラスの意味は何ですか?その後、特別なクラスはありますか?

ありがとう。

49
aali

他の違いは

template<class T> ...

許可されますが、

template<struct T> ...

ではありません。

94
Simon Richter

構造体で関数を定義することで、他に違いがないことを自分で証明できます。 C++で構造体とクラスについて教えていた大学の教授でさえ、これを学ぶことに驚いたことを覚えています(学生によって修正された後)。しかし、私はそれを信じています。ちょっとおもしろかった。教授は違いが何であるかを言い続け、学生は「実際にあなたも構造体でそれを行うことができます」と言い続けました。最後に教授。 「OK、違いは何ですか」と尋ねると、学生は、唯一の違いはメンバーのデフォルトのアクセシビリティであると彼に通知しました。

簡単なGoogle検索では、PODは「Plain Old Data」の略であることが示唆されています。

39
BlueMonkMN

PODクラスは、データメンバーのみを持ち、他には何もないプレーンオールドデータクラスです。同じことについてstackoverflowに関するいくつかの質問があります。 こちら を見つけてください。

また、C++では構造体のメンバーとして関数を使用できますが、Cでは構造体のメンバーとして関数を使用できません。Cの構造体のメンバーとして関数へのポインターが必要です。

8
Sriram

OK、PODはプレーンな古いデータを意味します。これは通常、structswithout任意のメソッドを指します。これらのタイプはその後、一緒に属する複数のデータを構造化するために使用されるためです。

メソッドを持たない構造体については、構造体にメソッドがあることを何度も見てきましたが、これが不自然になるとは思いません。

3

1)C++の唯一の違いです。

2)POD: プレーンな古いデータ 他のクラス-> PODではありません

2
knivil