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