C++における「型」と「クラス」の違い

オブジェクト指向プログラミングの解説書で、「クラスは型」「組込型はクラスの特殊形」などの記述を見ますけど、実際のプログラミングで分析や設計を行なっていると、少なくともC++においては、やはり「型」と「クラス」は微妙に違うものだと思われてくるのです。

もちろん僕はなにも、教科書が間違っているなどと言いたいわけではなく、たしかに、クラスが型である(あるいは型はクラスの特殊形である)という考え方は、理論的には正しいことはわかります。しかし、教科書の練習問題レベルではなく、実際の開発現場で、本当に型とクラスは同じ扱いがされているでしょうか。

僕の場合は、型とクラス(少なくとも自作クラス)は、同じ扱いはしていません。

たとえばcharやintなどの基本的な型は、

int num;
char c;

などのようにサクッと宣言して使いますよね。しかし、例えば「顧客」クラス CKokyaku というクラスがあったとして、実際のコーディングで

CKokyaku kyaku;

などとサクッと宣言する局面が、それほど多くあるでしょうか。
それよりもやはり、インスタンスを生成する際は、上記のような直接的な方法ではなく、

CKokyaku* pKyaku;
pKyaku = new CKokyaku;

のように、ポインタを使用するのが普通じゃないかと思うのです。

逆に、int型の変数をポインタでnewする、

int* ptr;
ptr = new int;

などとすることは、(教科書の練習問題以外では)まずあり得ないでしょう。

つまり、「型」と「クラス」は、理論的には同列に扱えるとしても、実際には下記のような「使われ方の違い」がある、とは考えられないでしょうか。

型:
実体は、直接宣言することにより生成される。
その実体は「変数」と呼ばれる。
「変数」は短期間に消滅する。

クラス:
実体生成はポインタを経由してnewにより行われる。
その実体は「インスタンス」と呼ばれる。
「インスタンス」は比較的長期間(しばしばプログラム終了まで)生存する。

いかがでしょうか。


カテゴリー: コンピュータ