オブジェクト指向プログラミングの解説書で、「クラスは型」「組込型はクラスの特殊形」などの記述を見ますけど、実際のプログラミングで分析や設計を行なっていると、少なくともC++においては、やはり「型」と「クラス」は微妙に違うものだと思われてくるのです。
もちろん僕はなにも、教科書が間違っているなどと言いたいわけではなく、たしかに、クラスが型である(あるいは型はクラスの特殊形である)という考え方は、理論的には正しいことはわかります。しかし、教科書の練習問題レベルではなく、実際の開発現場で、本当に型とクラスは同じ扱いがされているでしょうか。
僕の場合は、型とクラス(少なくとも自作クラス)は、同じ扱いはしていません。
たとえばcharやintなどの基本的な型は、
int num;
char c;
などのようにサクッと宣言して使いますよね。しかし、例えば「顧客」クラス CKokyaku というクラスがあったとして、実際のコーディングで
CKokyaku kyaku;
などとサクッと宣言する局面が、それほど多くあるでしょうか。
それよりもやはり、インスタンスを生成する際は、上記のような直接的な方法ではなく、
CKokyaku* pKyaku;
pKyaku = new CKokyaku;
のように、ポインタを使用するのが普通じゃないかと思うのです。
逆に、int型の変数をポインタでnewする、
int* ptr;
ptr = new int;
などとすることは、(教科書の練習問題以外では)まずあり得ないでしょう。
つまり、「型」と「クラス」は、理論的には同列に扱えるとしても、実際には下記のような「使われ方の違い」がある、とは考えられないでしょうか。
型:
実体は、直接宣言することにより生成される。
その実体は「変数」と呼ばれる。
「変数」は短期間に消滅する。
クラス:
実体生成はポインタを経由してnewにより行われる。
その実体は「インスタンス」と呼ばれる。
「インスタンス」は比較的長期間(しばしばプログラム終了まで)生存する。
いかがでしょうか。
-
最近の投稿
アーカイブ
カテゴリー
リンク