Q.
class と struct の違いは何か?
A.
構造体structはデータのまとまりに名前を付けただけ。
classはコンストラクタを実装できる。
class と struct は、C++において構造体を定義するためのキーワードであり、大きな違いはありません。両者の機能はほぼ同じで、メンバ変数やメンバ関数を定義することができます。
ただし、一般的には以下のような使い分けがされます。
class:カプセル化や情報隠蔽など、オブジェクト指向プログラミングの機能を使用する場合に用いられます。
struct:C言語の構造体を使ったプログラムから移行した場合や、メンバが public であるような単純なデータ構造を定義する場合に用いられます。
具体的な違いとしては、class のデフォルトのアクセス修飾子は private であるのに対して、struct のデフォルトのアクセス修飾子は public である点があります。しかし、アクセス修飾子は明示的に指定することが推奨されており、実際のコードでの使用頻度はそれほど高くありません。
例えば、以下のように class と struct を使った場合、どちらの場合でも同じように動作します。
凡人: 「class」と「struct」ってどう違うの?
恋するコンピュータサイエンス: いい質問だね!C++では、これらは両方とも構造体を定義するためのキーワードなんだ。基本的には機能が同じで、メンバ変数やメンバ関数を持たせることができるよ。
凡人: でもなんで2つあるの?
恋するコンピュータサイエンス: 「class」はカプセル化や情報隠蔽など、オブジェクト指向プログラミングの機能を使う時に使われることが多いんだ。一方、「struct」はC言語の構造体を使ったプログラムから移行したり、メンバがpublicである単純なデータ構造を作る時に使うことが多いよ。
凡人: 他に違いはあるの?
恋するコンピュータサイエンス: 実はもう一つ大きな違いがあって、それはデフォルトのアクセス修飾子なんだ。class
はデフォルトでprivate
だけど、struct
はpublic
なんだよ。
凡人: えっ、それってどういうこと?
恋するコンピュータサイエンス: つまり、class
で定義されたメンバはデフォルトで外部からアクセスできないけど、struct
ではデフォルトで外部からアクセスできるということ。ただ、アクセス修飾子は明示的に指定することが推奨されているから、実際のコードではそんなに違いは感じないことが多いんだ。
Copy code
class MyClass {
public:
int x;
void func() { }
};
struct MyStruct {
int x;
void func() { }
};
int main() {
MyClass c;
c.x = 1;
c.func();
MyStruct s;
s.x = 2;
s.func();
return 0;
}