抽象クラス ― 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
最近のコメント