2009-08-19 14 views
13

C++クラスで抽象的なキーワードを書くことはできますか?C++クラスで `abstract`キーワードを使うことができます

+23

もちろん、できます。残念ながら、コードはコンパイルされませんが、=) – SadSido

+0

Visual C++の抽象キーワード(Micrsoft特有)はどうですか?それは標準ではなく、私の意見ではうまく実装されていますが、それは重要ですね。 :P – user965369

+0

C++の純粋仮想関数に加えて、クラス名プレフィックスとして "A_"という抽象クラスを任意の言語でマークします。 "A_MyAbstractClass"。私は個人的にはこれが非常に便利だとわかります。 –

答えて

17

いいえ、C++にはキーワード抽象はありません。ただし、pure virtual functionsと書くことができます。それは抽象クラスを表現するC++の方法です。

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

それらの少なくとも1つが抽象であると考えられる有する任意のクラス:C++で

35

純粋仮想関数は、として宣言されています。

+3

戻り値のタイプがありません。また、メソッドは仮想でなければなりません。 – Naveen

+1

絶対に正しく、ありがとうございます。男、コードのメンテナンスから新しいコードを書いていく必要があります。それは、あなたの脳を他人の誤りだけを見て解消します。 :-D – DevSolar

5

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

+4

... C++ではありません。真実、ref、それは侵略です... – DevSolar

+5

技術的には、ネイティブコード用のMicrosoft C++拡張機能です.Netをターゲットにしていないとしても、C++/CLI固有のものではありません。ちょうど拡張で、 '__interface'や' __declspec(property) 'と同じです。まだISO C++ではありません。 –

+1

downvoteではなく、C++は標準C++を意味します。すべてのXYZ非標準実装を明示的に指定しなければならず、そのような仕様が作成されるまでその存在を認識する理由はありません。 – lorefnon

4

いいえ、抽象クラスとしてクラス内に少なくとも1つの純粋仮想関数を持つ必要があります。ここで

がそこにはキーワードが「抽象的」ではありませんが、純粋仮想関数が1のインタフェースとして使用を拡張し、再できた抽象クラスにしてクラスをオンにします。cplusplus.com

40
#define abstract 
0

良いリファレンスです

1

純粋仮想関数を追加すると、他の人が指摘するように、クラスは抽象クラスになります。

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

例:

class Base 
{ 
protected: 
    Base() 
    { 
    } 

public: 
    void foo() 
    { 
    } 

    void bar() 
    { 
    } 
}; 

class Child : public Base 
{ 
public: 
    Child() 
    { 
    } 
}; 
2

実際キーワードabstractは、C++(VS2010少なくとも)に存在し、Iは非イ​​ンスタンス化としては、クラス/構造体を宣言するために使用することができるが見つかりました。

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

+0

'abstract'はC++標準の一部ではありません。 – smerlin

+0

標準ではありませんが、機能しないサニティチェックであるため、ケンの回答ごとに他のコンパイラで条件付きの '#define 'で簡単に修正できます。 –

+0

@cz '#define abstract'は何を達成するのですか? –

0

のC++で利用可能な任意抽象的なキーワード何がない.because何あなたがキーワードとして抽象的に使用することはできません。

クラスをin C++アブストラクトにしたい場合は、少なくとも1つの関数を純粋仮想関数として宣言することができます。

しかし、派生クラスでは、定義コンパイルエラーを与える必要があります。

EX:

class A 
{ 

public : 

    virtual void sum()=0; 

}; 

注:

私は抽象は、C++のキーワードではないことを言った上でので、あなたは、変数名、クラス名として抽象的に使用することができます。

0

いいえ、C++にはキーワード抽象はありません。ただし、純粋な仮想関数を書くことはできます。それは抽象クラスを表現するC++の方法です。これは、.NETフレームワークのC++/CLI言語の一部として導入されたキーワードです。いいえ、少なくとも1つの抽象クラスとして純粋仮想関数を持つ必要があります。

class SomeClass { public: virtual void pure_virtual()= 0; //純粋な仮想関数

};

関連する問題