12

このような場合、構造体よりもクラスを使用する利点はありますか? (注:変数のみを保持し、関数はありません)

class Foo { 
private:   
   struct Pos { int x, y, z };
public:    
   Pos Position; 
};

対:

struct Foo {
   struct Pos { int x, y, z } Pos;
};

同様の質問:

4

7 に答える 7

23

構造体とクラスの唯一の違いは、そのメンバーのデフォルトの可視性です (構造体はデフォルトでパブリックに、クラスはデフォルトでプライベートになります)。

個人的には、POD 型には構造体を好み、それ以外にはクラスを使用する傾向があります。

編集: litbはコメントで適切な指摘をしたので、ここで彼を引用します。

その他の重要な違いの 1 つは、デフォルトで構造体が他のクラス/struct public から派生するのに対し、クラスはデフォルトで非公開で派生することです。

于 2009-01-10T17:58:23.063 に答える
8

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 };
于 2009-01-12T20:53:44.470 に答える
6

structC++ ではまったく同じことをclass意味しますが、構造体メンバーとベースのデフォルト アクセスはパブリックであるのに対し、クラスではプライベートであるという点が異なります。public メンバーしかないクラスには struct を、それ以外はすべて class を選択する傾向がありますが、それはスタイルの問題にすぎません。

于 2009-01-10T17:59:08.117 に答える
3

クラスと構造体の唯一の違いは、構造体メンバーが既定でパブリックであり、クラス メンバーが既定でプライベートであることです。だから私はあなたが一番好きな方で行くと言います。どちらがより読みやすいかという点で議論がなされることは確かですが、それは大したことではないと思います.

于 2009-01-10T17:58:57.040 に答える
1

基本的に、構造体とクラスのどちらを選択するかは、スタイルと入力する量によって決まります。

  • クラス/構造体にパブリック メンバーしかない場合は、struct キーワードを使用することもできます。後で「public:」と入力する手間が省けます。
  • クラスではなく構造体を選択するもう 1 つの理由は、オブジェクトの意図を暗黙的に文書化することです。したがって、POD 型を構造体 (コンストラクターやいくつかの静的ヘルパー メソッドなどを含む場合でも) に作成し、他のすべての「通常の」クラスには class を使用します。
于 2009-01-11T00:16:50.600 に答える
0

型の内容にメモリ割り当ての問題がない場合 (プレーンな int など)、それstructが目的であり、コードを使用する人に正当化できる意識的な決定を下した場合は、使用しても問題ありません。 . ただし、メンバーのいずれかがポインター型である場合は、メモリ管理の問題についてよく考える必要があります。を使用しても問題ないかもしれませstructんが、デストラクタやいくつかのコンストラクタなどが必要になる可能性が高くなります。その時点で、 が必要ですclass

于 2009-01-10T19:13:36.187 に答える
-1

「(注:変数のみを保持し、関数はありません)」

決して大きな言葉ではありません。通常、「決して」は「最終的に」を意味します。そのため、クラスを使用することをお勧めします。そうすれば、物事が変わっても、あまり変える必要はありません。

Java (および Python) の人々は、すべてがクラスであることに問題はありません。C++ が「構造体」と呼ぶ特殊なメソッドのないクラスがなくても、問題はありません。

于 2009-01-10T17:58:43.763 に答える