はじめに
この文章はC言語の文法を理解し、簡単なプログラムを書くことができる人を対象に書かれています
C言語と C++ の違い
C++ を解説する時に「C言語にオブジェクト指向の考えを導入したのが C++」のように言われることがよくあります。これは間違えではありませんが、正しくありません。
まず、C言語でオブジェクト指向プログラミングを行うことは可能です。
そしてなにより、C++ で追加されたのはオブジェクト指向の機能だけではありません。
例えば、次のような機能が追加されています。
- オブジェクト指向プログラミング (クラス)
- テンプレート
- 関数・演算子のオーバーロード
- 名前空間
- STL (標準テンプレートライブラリ)
- 参照
- 例外
この中でも特に強力なのがテンプレートと、それを利用した標準ライブラリ STL です。
その強力さを知ってもらうために、簡単な例を示しましょう。
テンプレート
渡された int 型のポインタの中身を入れ替える関数、swap を考えます。
これを C 言語で書くと次のようになるでしょう。
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
これは、次のように使います。
int a = 10;
int b = 20;
swap(&a, &b);
この関数には、int 型しか扱えないという問題があります。
もし、double 型を扱いたい場合、C言語では新しい関数を定義する必要があります。
void swapd(double *a, double *b){
double temp = *a;
*a = *b;
*b = temp;
}
このような方法には2つの問題点があります。
- 型によって関数名が異なってしまうこと
- 同じ入れ替えるという処理なのに、関数を複数定義しなければいけないこと
C++ のテンプレートを使うと、この問題点を両方解消できます。
次のような関数を一つ定義します。
template <class T>
void swap(T *a, T *b){
T temp = *a;
*a = *b;
*b = temp;
}
この関数は、どんな型であっても、同じ swap という関数で値を交換できます。
このテンプレートの機能を利用して作られている C++ の標準ライブラリが STL です。
まとめ
今回は C++ のさわりだけ紹介しました。
次からは、各機能について詳細に解説していきたいと思います。