C++入門 C言語との違い

Last-modified: 2011-08-02 (火) 18:09:18

はじめに

この文章は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++ のさわりだけ紹介しました。
次からは、各機能について詳細に解説していきたいと思います。