C++

C++
★ この記事ではC++で必要な全般的な知識について広く淺く説明していくことを
  目標としています。随時更新します。

◎ 単語

 operator・・・プログラムのコードにおける演算の内容を指示する記号。『2+1』における『+』のこと。

◎ C++

☆C++とは、プログラミングの1つです。
 1998年にANSIとISOの合同委員会によってISO/IEC 14882:1998として標準化されたプログラミング言語

◎ 値渡し、参照渡し、ポインタ渡し

◯値渡し

  呼び出し側の引数の値で関数側のパラメータを初期化。値渡しが終了すると引数とパラメータは無関係になるので、関数側でパラメータを処理した結果が呼び出し側の引数に影響を与えることはない。

◯参照渡し

引数のアドレスを関数側のパラメータに渡す。関数側の処理で呼び出し側の引数の値を変更することができます。
 

◯ポインタ渡し

 ポインタが指し示すアドレスが関数側のパラメータに渡される。引数への影響は参照渡しと同様。

◎ 継承とカプセル化、オーバーロード、オーバーライド

継承

☆継承とは、基本となるクラスの性質を受け継ぎ、独自の拡張をすることです。


継承のもととなるクラスのことを、親クラス、スーパークラスと呼びます。それに対して、親クラスの機能を継承し、独自の機能を実装したクラスのことを、クラス、サブクラスと呼びます。

カプセル化

クラスのカプセル化とは、クラスのデータメンバに不正な値が入力されないようにするために、クラスの外部からのアクセスを遮断すること。
基本的にはクラスのカプセル化をした場合、データメンバにアクセスするメソッドを用意します。さらに値のチェックまで行えば安心です。

オーバーロード

☆ オーバーロードとは、引数が異なる同名の関数を複数定義することです。

オーバーライド

☆ オーバーライドとは、継承元の関数を継承先で上書きすることです。

◎ 構造体とクラスと共用体

構造体とクラスの共用体違いは

クラスはclassを使用して宣言し、各メンバへのアクセス指定子が、初期状態でprivateに設定されます。

構造体はstructを使用して宣言し、各メンバへのアクセス指定子が、初期状態でpublicに設定されます。

共用体はunionを使用して宣言し、各メンバへのアクセス指定子が、初期状態でpublicに設定されます。アクセス指定、静的メンバ変数、継承は使えません。
また、全てのメンバが同じメモリ領域を使用します。

privateはクラス内部からのアクセスだけを許可され、publicは全てのアクセスを許可します。また、protectedはクラス内部に加えクラスから派生したクラスからのアクセスを許可します。

構造体は、異なるデータをまとめて1つの型を作成することができる。

クラスは、構造体と同様にユーザ定義のデータ型。オブジェクト指向に基づいた強力な機能がある。

構造体とクラスの構造

構造体はメンバ変数メンバ関数で構成される。

クラスの構造は構造体と同様にメンバ変数(フィールド)メンバ関数(メソッド)で構成される。メンバ変数(フィールド)やメンバ関数(メソッド)を総称してメンバと呼ぶ。

class クラス名{

アクセス指定子:
 メンバ変数(フィールド)
   ・
   ・
 メンバ関数(メソッド)
   ・
   ・
};

 

プログラムを記載

クラスのインスタンス化

クラスのインスタンス化とは、クラスを呼び出してメモリ上に生成すること。
クラスのインスタンス化をすることで、クラスのメンバ変数やメンバ関数を呼び出すことができるようになります。

クラス名 変数名;

プログラムを記載

インスタンスは必要に応じていくつも作ることが可能です。インスタンスはヒープ領域に生成されます。

インスタンス化したクラス型変数

インスタンス化したクラス型の変数を利用して、クラスで定義されている各メンバを呼び出すことができる。

上記の式の”.”はドット演算子といい、これを使用することで、メンバを呼び出すことができる。

クラス内部でのメソッドの定義

クラス内部でメソッドを定義する場合、通常の関数の定義方法とは少し異なる。

戻り値の型 クラス名::メンバ関数名(引数リスト)
上記の式の”::”はスコープ演算子といい、これを使用することで、メソッドがどのクラスのものであるかを示す。

◎ ポインタとnew演算子

ポインタ

ポインタを使用して、クラスのメンバを呼び出すことができます。
これにはメンバポインタ演算子”->”を使用します。

new演算子

new演算子を使用することで、メモリ領域を明示的に確保します。
delete演算子を使用することで、メモリ領域を明示的に解放します。

プログラムを記載

◎ ポインタとアロー演算子

構造体へのアクセス方法は、ポインタとアロー演算子を使用する方法があります。

ポインタは”.”を使用します。

アロー演算子は”->”を使用します。

◎ 列挙体と共用体

◎ 静的フィールドと静的メソッド

クラスをインスタンス化することなく、直接呼び出すことができます。

◎ STL(Standard Template Library)

☆ 使用頻度の多い機能をまとめたクラステンプレートや関数テンプレートが数多く用意されており、これらのテンプレートをSTL(標準ライブラリテンプレート)と呼んでいる。STLには以下の4大要素で構成されている。

◯メリット


 ・既存の型に依存しないジェネリックプログラミングが実現できる。
 ・配列の操作に特化していて動的サイズの配列が簡単にできる。
 ・アルゴリズムを利用することで、データのソートや関数が簡単にできる。

◯ コンテナ

☆オブジェクトの集合を格納するオブジェクト。

◯ アルゴリズム

☆様々なプログラムで用いられる処理手順をまとめたもの。動的配列操作を簡単に行うことができる。

◯ イテレータ

☆ コンテナの要素にアクセスするためのイテレータ

◯ 関数オブジェクト

operator関数をオーバーロードしたクラスから生成したオブジェクト。

◎ オーバーロード

◎ constについて

☆ constとは、変数の値を変更せず定数として宣言する際に使う修飾子です。c値を変更しようとすると以下のようにコンパイルエラーが発生します。

ひとつの関数内のみで定数を扱う場合に使用するときは「const」を使用し、それ以外は「#define」を使用して定数を定義しています。

◎ nullptrについて

まず、「NULL」についての再確認です。
「#define NULL 0」と定義されています。つまり0という定数というだけです。

一方、nullptrはstd::nullptr_t型であり「0」ではないので、きちんとポインタとして扱ってくれます。

ちなみに関数のオーバーロードの際に「NULL」だと意図した動作にならないため、c++ 11より「nullptr」が追加されました。

◎ テンプレート

☆C++のテンプレートには、以下の4つがあります。

  • 関数テンプレート
  • クラステンプレート
  • エイリアステンプレート
  • メンバテンプレート



>画像という分野

画像という分野

画像に関連することを網羅していきます。

ぜひお時間がある方はのぞいてみてください。

CTR IMG