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 publicclass:デフォルトで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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- structとclassの使い分け
- メンバー変数とメソッド
- コンストラクターとメンバー初期化子リスト
- thisポインターとカプセル化