抽象データ型と Java/C++ そして COM/CORBA
抽象データ型とは…
- 抽象データ型
- 継承
- 多態
をオブジェクト指向の三本柱などと称しています。その中でも抽象データ型(あるいはデータの抽象化)はオブジェクト指向の最も基本的で重要な概念ではないかと考えます。
"データを抽象化する"とは、データをそれに対して適用できる操作の集合で定義することです。
簡単な例として"カウンタ"を考えてみましょう。カウンタには3つの操作:
- +1する (increment)
- -1する (decrement)
- 現在値を取得する
を提供させることにします。
さて、このカウンタをCで実現するとどうなるでしょうか…
sizeofの不思議
はじめに
Cではsizeofによって構造体がメモリ上で占める大きさ(バイト数)を知ることができます。
struct s{
int x;
int y;
};
...
cout << sizeof(s) << endl;
僕の愛用する処理系、Visual C++ 6.0では 8が得られました。intひとつにつき4byteを消費するからでしょう。
それではC++でのclassの大きさはどうでしょう。内包するメンバ変数それぞれの占めるバイト数の総和になるのでしょうか。
C++の新しいキャスト
従来のキャストの問題点
異なる型への変換において、C/C++ではキャストが用いられます。
// intからlongへのキャスト int ival; int lval = (long)ival;
ご存知のとおり、キャストは非常に危険です。 本来ならば型の不一致によるコンパイルエラーをねじ伏せるのですから。