C++クラスにabstractキーワードを記述できますか?
12 に答える
#define abstract
いいえ。
C++ の純粋仮想関数は、次のように宣言されます。
class X
{
public:
virtual void foo() = 0;
};
それらの少なくとも 1 つを持つすべてのクラスは抽象と見なされます。
いいえ、C++ にはキーワード抽象はありません。ただし、純粋仮想関数を作成することはできます。これは、抽象クラスを表現する C++ の方法です。
これは、.NET フレームワークの C++/CLI 言語仕様の一部として導入されたキーワードです。
いいえ、抽象化するには、クラスに少なくとも 1 つの純粋仮想関数が必要です。
ここに良いリファレンスがありますcplusplus.com
他の人が指摘しているように、純粋仮想関数を追加すると、クラスは抽象化されます。
ただし、純粋な仮想メンバーを持たない抽象基本クラスを実装する場合は、コンストラクターを保護すると便利です。このようにして、ユーザーが ABC をサブクラス化して使用するように強制します。
例:
class Base
{
protected:
Base()
{
}
public:
void foo()
{
}
void bar()
{
}
};
class Child : public Base
{
public:
Child()
{
}
};
実際にはキーワードabstract
がC++(少なくともVS2010)に存在し、クラス/構造体をインスタンス化されていないものとして宣言するために使用できることがわかりました。
struct X abstract {
static int a;
static void foX(){};
};
int X::a = 0;
struct Y abstract : X { // something static
};
struct Z : X { // regular class
};
int main() {
X::foX();
Z Zobj;
X Xobj; // error C3622
}
MSDN: https://msdn.microsoft.com/en-us/library/b0z6b513%28v=vs.110%29.aspx
Java に存在する抽象キーワードは、純粋仮想関数を使用して C++ で実現できる同様の抽象化です。