そろそろC++やります
そろそろC++をやります。そろそろC++をやりたいからです。
何回やるかはわかりません。基礎を理解するまではやろうと思います。
という感じでやっています。
※ 初心者がメモレベルで記録するので、技術記事としてはお力になれないかもしれません。
内容
スコープの識別や、曖昧さを解決するために使われます。
例えば namespace ごとに同名の変数が定義されていた時に、{namespace名}::{変数名}
とすることでアクセス先を明示的に変えることができます。
namespace NamespaceA { int x; } namespace NamespaceB { int x; } int main() { NamespaceA::x = 1; NamespaceB::x = 2; int x = 3; cout << NamespaceA::x << endl; cout << NamespaceB::x << endl; cout << x << endl; return 0; }
Output
1 2 3
グローバルスペースは::x
のようにアクセスすることができます。
int x; int main(){ int x = 1; ::x = 1; }
namespaceはusingディレクティブによって、変数もアクセスできるようになります。
namespace NamespaceA { int x; } namespace NamespaceB { using namespace NamespaceA; } int main() { NamespaceB::x = 4; // NamespaceBはNamespaceAのxを表しているので、4を出力する cout << NamespaceB::x << endl; }
静的メンバの参照
::
を用いて静的メンバ(staticメンバ)にアクセスすることができます。
class MyClass { public: static int X; }; int main() { MyClass::X = 34; }
メンバアクセス修飾子.
, ->
これらは、struct
やunion
、class
のメンバーを参照するために使用します。
- ポインタではない場合は
.
- ポインタの場合は
->
を使用します。
class MyClass { public: MyClass(int xVal) { x = xVal; }; int x; }; int main() { MyClass mc = MyClass(32); cout << mc.x << endl; MyClass *mcPtr = new MyClass(42); cout << mcPtr->x << endl; }
添字演算子 [ ]
添字演算子[ ]
は、[配列](の要素指定とアクセスに用います。
int intAr[5] = {3, 4, 5, 6, 7}; cout << intAr[3] << endl;
class MyIntArray { public: MyIntArray(int size) { intArray = new int[size]; for (int i = 0; i < size; i++) { intArray[i] = 11 * i; } }; inline int operator[](std::size_t index) const { cout << "aain" << endl; return intArray[index % size]; } inline int &operator[](size_t index) { cout << "iiiiin" << endl; return intArray[index % size]; } private: int size; int *intArray; };
参考リスト
- スコープ解決演算子: `::` | Microsoft Learn
- スコープ解決演算子 :: (C++ のみ)
- メンバー アクセス演算子: '.' および '->' | Microsoft Learn
感想
スコープ解決演算子(::
)だけ、初めての内容でしたが、他は復習みたいな形でした!前にやったことが出てくると楽しくなってきます。
次回も演算子の続きを行います。