ホーム » スタッフ » 斉藤徹 » 講義録 » オブジェクト指向 » 抽象クラスの純粋指定

2021年5月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

検索・リンク

抽象クラスの純粋指定

専攻科のオブジェクト指向プログラミングの授業で、抽象クラスの説明をしたけど、抽象クラスで仮想関数が定義できないところでは、以下のような ” = 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