C++のメンバアクセス演算子を完全解説!初心者でもわかる . → :: の使い方まとめ
生徒
「C++の本を読んでいたら、ドットとか矢印とか、コロンが二つ並んだ記号が出てきました。記号ばかりで混乱しています…」
先生
「それはメンバアクセス演算子と呼ばれるものです。クラスや構造体の中身を使うために必要な大切な記号ですよ。」
生徒
「そもそも、クラスとかメンバって何ですか?」
先生
「では、パソコンを触ったことがない人でも分かるように、最初から順番に説明していきましょう。」
1. メンバアクセス演算子とは?
メンバアクセス演算子とは、C++でクラスや構造体の中にあるデータや機能を使うための記号です。代表的なものが「.(ドット)」「->(アロー)」「::(スコープ解決演算子)」です。
クラスや構造体は「設計図」、その中にある変数や関数は「部品」と考えてください。メンバアクセス演算子は、「その部品を取り出すための道具」です。
C++の演算子まとめの中でも、これらはオブジェクト指向プログラミングの基本として、とても重要な役割を持っています。
2. ドット演算子(.)の基本的な使い方
ドット演算子(.)は、一番よく使われるメンバアクセス演算子です。変数として作ったクラスや構造体の中身を使うときに使います。
例えるなら、「人の名前」や「人の年齢」を確認するときに、「人.名前」「人.年齢」と指定するような感覚です。
#include <iostream>
struct Person {
int age;
};
int main() {
Person p;
p.age = 20;
std::cout << p.age << std::endl;
return 0;
}
20
この例では、Personという構造体の中にあるageというメンバ変数に、ドット演算子を使ってアクセスしています。
3. アロー演算子(->)の役割
アロー演算子(->)は、ポインタを使ってクラスや構造体にアクセスするときに使います。ポインタとは、「場所を指し示す住所」のようなものです。
「この箱はどこにありますか?」と住所だけ渡されて、その箱の中身を取り出すイメージです。そのときに使うのがアロー演算子です。
#include <iostream>
struct Person {
int age;
};
int main() {
Person p;
Person* ptr = &p;
ptr->age = 30;
std::cout << ptr->age << std::endl;
return 0;
}
30
ポインタを使う場合はドット演算子ではなく、必ずアロー演算子を使うと覚えておきましょう。
4. ドット演算子とアロー演算子の違い
ドット演算子とアロー演算子の違いは、「直接持っているか」「住所だけ持っているか」の違いです。
直接そのデータを持っている場合はドット演算子、ポインタ経由でアクセスする場合はアロー演算子を使います。
Person p;
Person* ptr = &p;
p.age = 25; // ドット演算子
ptr->age = 40; // アロー演算子
実は、アロー演算子は「(*ptr).age」を省略した書き方です。初心者はこの仕組みを知っておくと混乱しにくくなります。
5. スコープ解決演算子(::)とは?
スコープ解決演算子(::)は、「どこに属しているか」を明確にするための演算子です。クラス名や名前空間、グローバル変数を指定するときに使います。
学校で言うと、「1年1組の山田さん」とフルネームで指定するようなものです。
#include <iostream>
class Sample {
public:
static int value;
};
int Sample::value = 100;
int main() {
std::cout << Sample::value << std::endl;
return 0;
}
100
このように、クラスの外からクラスの中身を指定するときにスコープ解決演算子が使われます。
6. ::は名前空間でも使われる
スコープ解決演算子は、名前空間という仕組みでも使われます。名前空間とは、同じ名前がぶつからないようにするためのグループ分けです。
std::coutの「std」も名前空間で、「coutはstdというグループに属しています」という意味になります。
#include <iostream>
int main() {
std::cout << "Hello C++" << std::endl;
return 0;
}
C++の演算子まとめを学ぶうえで、::は必ず何度も登場する重要な演算子です。
7. 初心者がつまずきやすいポイント
メンバアクセス演算子で多いミスは、「ポインタなのにドットを使う」「普通の変数なのにアローを使う」ことです。
まずは「これは住所か?実体か?」と自分に問いかけるクセをつけると、.と->の使い分けが自然にできるようになります。
C++初心者のうちは、コードを声に出して読むのもおすすめです。「ptrが指している先のage」と読めるようになると理解が一気に深まります。