0Pricing
C++ Academy · レッスン

structとclassの使い分け

structとclassの実質的な唯一の違いを理解し、慣例に沿って使います。

「structとclassの使い分け」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。

同じ仕組み、異なるデフォルト

C++では、structとclassはほぼ同じです。言語レベルでの唯一の違いは、デフォルトのアクセス指定子です。

struct:デフォルトでpublic

structでは、別途指定しない限りメンバーはpublicです。

struct Point {
    int x;
    int y;
};  // x and y are public

class:デフォルトでprivate

classでは、publicと指定しない限りメンバーはprivateです。

class Counter {
    int n_ = 0;       // private
public:
    void increment() { n_++; }
    int  value() const { return n_; }
};

構文だけでなく慣例もある

C++コミュニティでは、2つのキーワードを意図の伝達に使い分けています。

  • struct — 受動的なデータ(POD風で、すべてpublic)
  • class — カプセル化された振る舞い(publicインターフェイスとprivateな状態)

structを使う場合

座標、RGBカラー、単純なレコードなど、プレーンなデータ集成体にはstructを使ってください。

struct Point { int x; int y; };
struct Color { unsigned char r, g, b, a; };
struct Person { std::string name; int age; };

classを使う場合

守るべき不変条件がある場合、状態をメソッド経由で変更する場合、またはカプセル化が必要な場合は、classを使ってください。

class BankAccount {
    double balance_ = 0.0;   // protected invariant
public:
    void deposit(double amount);
    bool withdraw(double amount);
    double balance() const;
};

集成初期化

publicメンバーだけを持つ構造体は、波かっこの構文で初期化できます。宣言順に値を並べます。

struct Point { int x; int y; };
Point p1{3, 4};      // aggregate init
Point p2{.x = 3, .y = 4};   // designated init (C++20)

継承も異なる

継承はstructではデフォルトでpublic、classではデフォルトでprivateです。迷った場合は明示的に指定してください。

class B {};
struct D1 : B {};         // public inheritance
class D2 : B {};          // private inheritance

混在するメンバー

デフォルトは異なりますが、どちらのキーワードでもpublic、private、protectedのセクションを使えます。

struct Config {
private:
    int internalCount = 0;
public:
    std::string name;
    void incrementCount() { ++internalCount; }
};

キーワードからコードを読み取る

structを見たらデータフィールドを、classを見たらカプセル化されたロジックを想定してください。キーワードは、作成者の意図を示す手がかりとして扱います。

スタイルガイド

ほとんどのスタイルガイド(Google、LLVM、ISO C++ Core)は、不変条件を持たない受動的な集成体に限ってstructを使うことを推奨しています。自明でないメソッドを持つものはclassにします。

クイックチェック

C++において、structとclassの言語レベルでの唯一の違いは何ですか?

まとめ

プレーンなデータ集成体にはstructを、不変条件と振る舞いを持つ型にはclassを使ってください。言語上の違いはデフォルトのアクセス指定だけですが、慣例では大きく使い分けられています。

よくある質問

「structとclassの使い分け」レッスンは無料ですか?

はい。「structとclassの使い分け」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。

「structとclassの使い分け」で何を学びますか?

structとclassの実質的な唯一の違いを理解し、慣例に沿って使います。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C++ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「structとclassの使い分け」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC++ Academyレッスンでコードを書いて実行できますか?

はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. structとclassの使い分け
  2. メンバー変数とメソッド
  3. コンストラクターとメンバー初期化子リスト
  4. thisポインターとカプセル化
← C++ Academyに戻る