専攻科のオブジェクト指向プログラミングの授業で、抽象クラスの説明をしたけど、抽象クラスで仮想関数が定義できないところでは、以下のような ” = 0 ” で、仮想関数が無いことを明示する必要がある。「んで、=0 ってなんで zero やねん?」との疑問。
ということで、いろいろと試してみた。
class A { public: virtual void print() const = 0 ; } ; // この書き方が基本。 class A { public: virtual void print() const = 123 ; // 数字を書いてみた。 } ; // error: invalid pure specifier (only ‘= 0’ is allowed) before ‘;’ token
‘= 0′ だけが許されているとのエラーだし、これがすべてかな。
でも、なんとなく気に入らないので、C言語では、NULL は、’#define NULL 0′ で定義されているので、’= NULL’ と書けば、仮想関数のポインタが NULL っぽいし、この書き方が、自分的には、一番しっくりくるんだけど…
#include <stdio.h> class A { public: virtual void print() const = NULL ; } ; // error: invalid pure specifier (only ‘= 0’ is allowed) before ‘;’ token
どうも C++ では、’#define NULL 0′ ではないみたい。試しに、先頭に ‘#define NULL 0′ を書いたら、’#define NULL __null’ で定義されていて違うよ…みたいなエラーが表示された。んで、’__null’ って何?とは思うけど、こういうことらしい。ポインタの型のデータ長の’0’で定義されている。
ためしに、C++ の null で初期化は…と思ったけど、やっぱりだめ。
class A { public: virtual void print() const = null ; } ; // error: invalid pure specifier (only ‘= 0’ is allowed) before ‘;’ token