抽象クラス2008/10/26 08:04

C++, C++/CLI では、純粋仮想関数を含んだクラスを、抽象クラス と呼びますが、C++/CLI ではクラスの宣言時に抽象クラスの場合は、 abstruct をつける必要があります。

つまり、

public ref class Base abstruct{ public:

  virtual func() = 0;
  virtual func2(){ }

};

と言った感じです。

ちなみに、派生クラスでは、

public ref class Derived : Base{ public:

  virtual func() override {}
  virtual func2() new{ } 

};

のように、virtual と override を書きます。面倒な。。。

しかも、override の代わりに new を指定すると、動作が変わります。

Base b = new Derived();

b.func2() とした場合に、なんと、new を指定していると、Base の func2 関数が呼ばれます。

これ、使い道、あるのでしょうか?

(※) この new の使い方はよくわかりませんが、virtual を使わない場合を 考えると、これは、わかります。

class Base{ public:

 void func(){ cout << "Base" << endl; }

};

とした場合、

class Derived : public Base{ public:

  void func(){ cout << "Derived" << endl; }

};

とするのは、C++ では合法です。ただ、こうすると、Base の func 関数が 上書きされて消えてしまうので、C++/CLI では、関数定義の後ろに、 new というキーワードを書くようにしていると思います。

ただ、virtual に new を書く理由はさっぱりわかりかねます。。。

ここを参考にしました。 http://ufcpp.jp/study/csharp/oo_inherit.html