28

C++クラスにabstractキーワードを記述できますか?

4

12 に答える 12

51
#define abstract
于 2009-08-24T21:57:32.510 に答える
48

いいえ。

C++ の純粋仮想関数は、次のように宣言されます。

class X
{
    public:
        virtual void foo() = 0;
};

それらの少なくとも 1 つを持つすべてのクラスは抽象と見なされます。

于 2009-08-19T06:29:37.893 に答える
21

いいえ、C++ にはキーワード抽象はありません。ただし、純粋仮想関数を作成することはできます。これは、抽象クラスを表現する C++ の方法です。

于 2009-08-19T06:29:28.890 に答える
7

これは、.NET フレームワークの C++/CLI 言語仕様の一部として導入されたキーワードです。

于 2009-08-19T06:29:42.243 に答える
4

いいえ、抽象化するには、クラスに少なくとも 1 つの純粋仮想関数が必要です。

ここに良いリファレンスがありますcplusplus.com

于 2009-08-19T06:30:18.063 に答える
4

他の人が指摘しているように、純粋仮想関数を追加すると、クラスは抽象化されます。

ただし、純粋な仮想メンバーを持たない抽象基本クラスを実装する場合は、コンストラクターを保護すると便利です。このようにして、ユーザーが ABC をサブクラス化して使用するように強制します。

例:

class Base
{
protected:
    Base()
    {
    }

public:
    void foo()
    {
    }

    void bar()
    {
    }
};

class Child : public Base
{
public:
    Child()
    {
    }
};
于 2015-08-06T08:38:25.090 に答える
2

実際にはキーワード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

于 2015-09-19T23:54:58.657 に答える
0

Java に存在する抽象キーワードは、純粋仮想関数を使用して C++ で実現できる同様の抽象化です。

于 2021-10-02T01:31:56.720 に答える