このような場合、構造体よりもクラスを使用する利点はありますか? (注:変数のみを保持し、関数はありません)
class Foo {
private:
struct Pos { int x, y, z };
public:
Pos Position;
};
対:
struct Foo {
struct Pos { int x, y, z } Pos;
};
同様の質問:
このような場合、構造体よりもクラスを使用する利点はありますか? (注:変数のみを保持し、関数はありません)
class Foo {
private:
struct Pos { int x, y, z };
public:
Pos Position;
};
対:
struct Foo {
struct Pos { int x, y, z } Pos;
};
同様の質問:
構造体とクラスの唯一の違いは、そのメンバーのデフォルトの可視性です (構造体はデフォルトでパブリックに、クラスはデフォルトでプライベートになります)。
個人的には、POD 型には構造体を好み、それ以外にはクラスを使用する傾向があります。
編集: litbはコメントで適切な指摘をしたので、ここで彼を引用します。
その他の重要な違いの 1 つは、デフォルトで構造体が他のクラス/struct public から派生するのに対し、クラスはデフォルトで非公開で派生することです。
One side point is that structs are often used for aggregate initialized data structures, since all non-static data members must be public anyway (C++03, 8.5.1/1).
struct A { // (valid)
{
int a;
int b;
} x = { 1, 2 };
struct A { // (invalid)
private:
int a;
int b;
} x = { 1, 2 };
class A { // (invalid)
int a;
int b;
} x = { 1, 2 };
class A { // (valid)
public:
int a;
int b;
} x = { 1, 2 };
class A { // (invalid)
public:
int a;
private:
int b;
} x = { 1, 2 };
struct
C++ ではまったく同じことをclass
意味しますが、構造体メンバーとベースのデフォルト アクセスはパブリックであるのに対し、クラスではプライベートであるという点が異なります。public メンバーしかないクラスには struct を、それ以外はすべて class を選択する傾向がありますが、それはスタイルの問題にすぎません。
クラスと構造体の唯一の違いは、構造体メンバーが既定でパブリックであり、クラス メンバーが既定でプライベートであることです。だから私はあなたが一番好きな方で行くと言います。どちらがより読みやすいかという点で議論がなされることは確かですが、それは大したことではないと思います.
基本的に、構造体とクラスのどちらを選択するかは、スタイルと入力する量によって決まります。
型の内容にメモリ割り当ての問題がない場合 (プレーンな int など)、それstruct
が目的であり、コードを使用する人に正当化できる意識的な決定を下した場合は、使用しても問題ありません。 . ただし、メンバーのいずれかがポインター型である場合は、メモリ管理の問題についてよく考える必要があります。を使用しても問題ないかもしれませstruct
んが、デストラクタやいくつかのコンストラクタなどが必要になる可能性が高くなります。その時点で、 が必要ですclass
。
「(注:変数のみを保持し、関数はありません)」
決して大きな言葉ではありません。通常、「決して」は「最終的に」を意味します。そのため、クラスを使用することをお勧めします。そうすれば、物事が変わっても、あまり変える必要はありません。
Java (および Python) の人々は、すべてがクラスであることに問題はありません。C++ が「構造体」と呼ぶ特殊なメソッドのないクラスがなくても、問題はありません。