0Pricing
C++ Academy · レッスン

thisポインターとカプセル化

thisポインターを使い、privateとpublicによるアクセス制御でカプセル化を実現します。

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

this とは何か

非 static メンバー関数の内部では、this は現在のオブジェクトを指す暗黙のポインターです。名前の曖昧さを解消したり、参照を返したりするために使用します。

class Counter {
    int n_ = 0;
public:
    Counter& add(int x) {
        n_ += x;       // implicit this
        return *this;  // chain calls
    }
};

暗黙のアクセス

通常、this-> と書く必要はありません。メンバー名は自動的に検索されるため、this->n_ と n_ は同じ意味です。

this-> が必要な場合

パラメーターがメンバーと同じ名前で隠蔽している場合や、テンプレートで継承したメンバーを見つけるために名前検索の補助が必要な場合は、this-> を使用します。

class Person {
    std::string name_;
public:
    void setName(const std::string& name) {
        this->name_ = name;  // or name_ = name;
    }
};

*this を返してチェーン化

流暢なインターフェイスをサポートするには、*this を返します。

class StringBuilder {
    std::string s_;
public:
    StringBuilder& append(const std::string& part) {
        s_ += part;
        return *this;
    }
};

StringBuilder sb;
sb.append("Hello, ").append("World!");

const メソッド内の this

const メソッドの内部では、this の型は const ClassName* です。これを通じてメンバーを変更することはできません。

カプセル化:重要な考え方

カプセル化とは、内部状態を隠し、安全な操作だけを公開することです。データを private にし、意図した public メソッドだけを公開してください。

class Stack {
    std::vector<int> data_;     // hidden
public:
    void push(int v) { data_.push_back(v); }
    int  pop()       { int v = data_.back(); data_.pop_back(); return v; }
    bool empty() const { return data_.empty(); }
};

カプセル化する理由

カプセル化により、次のことが可能になります。

  • 呼び出し側を壊さずに内部表現を変更する
  • 不変条件を1か所で適用する
  • 境界で入力を検証する
  • オブジェクトの状態を局所的に把握する

public インターフェイスは契約

public インターフェイスは、呼び出し側に対する約束です。最小限で、意図が明確かつ安定したものにしてください。実装の詳細は private にします。

Getter と Setter

よく使われるパターンですが、過度に使いやすいので注意が必要です。すべてのメンバーに get/set を用意するのは避けてください。それではカプセル化の意味が失われます。フィールドではなく、操作を公開してください。

const 正確性を再確認

読み取り専用のメソッドにはすべて const を付けてください。呼び出し側は const インスタンスに対して安全に呼び出せるメソッドを把握でき、コンパイラーもそれを強制します。

friend 関数とクラス

friend キーワードを使うと、別の関数またはクラスに private メンバーへのアクセスを許可できます。結合が強くなるため、使用は控えめにしてください。

class Account {
    double balance_;
    friend void transfer(Account& a, Account& b, double amount);
};

クイックチェック

クラス Foo の void f() const と宣言されたメソッド内で、this の型は何ですか。

まとめ

非 static メソッド内では、this は現在のオブジェクトを指します。チェーン化(return *this)や名前の曖昧さの解消に使用してください。private データと、小さく意図の明確な public インターフェイスで状態をカプセル化してください。

よくある質問

「thisポインターとカプセル化」レッスンは無料ですか?

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

「thisポインターとカプセル化」で何を学びますか?

thisポインターを使い、privateとpublicによるアクセス制御でカプセル化を実現します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「thisポインターとカプセル化」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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