2009-08-19 13 views
13

Czy możemy napisać słowo kluczowe abstrakcyjne w klasie C++?Czy mogę użyć słowa kluczowego `abstract` w klasie C++?

+23

Oczywiście, możemy to zrobić. Niestety kod się nie skompiluje, chociaż =) – SadSido

+0

Co ze słowem kluczowym abstract w Visual C++ (specyficznym dla Micrsoft). To nie jest standardowe, czy też dobrze wdrożone w mojej opinii, ale to się liczy, prawda? : P – user965369

+0

Oprócz czystych wirtualnych funkcji w C++, zaznaczam klasy abstrakcyjne z "A_" jako prefiksem nazwy klasy w dowolnym języku, np. "A_MyAbstractClass". Osobiście uważam to za bardzo przydatne. –

Odpowiedz

17

Nie, C++ nie zawiera słów kluczowych. Możesz jednak napisać: pure virtual functions; to jest sposób wyrażania klas abstrakcyjnych w C++.

35

nr

Czyste funkcje wirtualne, w C++, są zadeklarowane jako:

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

dowolnej klasy posiadający co najmniej jeden z nich uważa się za streszczenie.

+3

Brakujący typ zwrotu. Również metoda powinna być wirtualna. – Naveen

+1

Absolutnie poprawne, dziękuję. Człowieku, muszę od czasu do czasu przejmować się kodyfikacją kodu i pisaniem nowego kodu - to rozwiązuje twój mózg tylko patrząc na błędy innych ludzi. :-D – DevSolar

5

Jest to słowo kluczowe wprowadzone jako element sprofilowania języka C++/CLI dla platformy .NET.

+4

... która nie jest C++. Poważnie, ref, to jest encroachment ... – DevSolar

+5

Z technicznego punktu widzenia jest to rozszerzenie C++ dla natywnego kodu, nawet jeśli nie kierujesz go do .NET, więc nie jest to specyficzne dla C++/CLI. Tylko rozszerzenie, tak samo jak '__interface' lub' __declspec (właściwość) '. Wciąż nie jest to oczywiście ISO C++. –

+1

Brak downvotes, ale C++ oznacza standardowe C++. Każda niestandardowa implementacja XYZ musi być wyraźnie określona i dopóki taka specyfikacja nie zostanie dokonana, nie ma powodu, aby potwierdzać jej istnienie. – lorefnon

4

Nie, musisz mieć co najmniej jedną czystą funkcję wirtualną w klasie, aby była abstrakcyjna.

Oto dobre referencje cplusplus.com

0

Nie ma słów kluczowych „streszczenie”, ale to czysta funkcja wirtualna włącza klasę do klasy abstrakcyjnej, które można rozszerzyć i ponownego wykorzystania jako interfejs.

1

Jak podkreślają inni, jeśli dodasz czystą funkcję wirtualną, klasa stanie się abstrakcyjna.

Jednakże, jeśli chcesz zaimplementować abstrakcyjną klasę podstawową bez żadnych czystych wirtualnych elementów, uważam za użyteczne uczynienie konstruktora chronionym. W ten sposób zmuszasz użytkownika do podklasy ABC, aby go użyć.

przykład:

class Base 
{ 
protected: 
    Base() 
    { 
    } 

public: 
    void foo() 
    { 
    } 

    void bar() 
    { 
    } 
}; 

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

rzeczywistości kluczowe abstract istnieje C++ (VS2010 przynajmniej) i stwierdzili, że mogą być używane do deklarowania klasa/struct jako nie wystąpienia.

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' nie jest częścią standardu C++. – smerlin

+0

Niestandardowe, ale ponieważ jest to niefunkcjonalne sprawdzenie poprawności, można je łatwo naprawić za pomocą warunkowego '# define' na innych kompilatorach zgodnie z odpowiedzią Kena. –

+0

@cz Co osiąga '#define abstract'? –

0

no nie można używać jako abstrakcyjne słowo kluczowe .because tam nie ma żadnego abstrakcyjne słowo kluczowe dostępne w C++.

jeśli chcesz utworzyć klasę jako C++, możesz zadeklarować przynajmniej jedną funkcję jako czystą funkcję wirtualną.

, ale w klasie pochodnej należy podać definicję, której dotyczy błąd kompilacji.

EX:

class A 
{ 

public : 

    virtual void sum()=0; 

}; 

uwaga:

można stosować abstrakcyjne jako nazwy zmiennej, nazwy klasy, ponieważ powyżej Mówiłem ci, że streszczenie nie jest to słowo kluczowe w C++.

0

Nie, C++ nie ma słowa kluczowego abstract.However, można pisać czysto wirtualne funkcje; to jest sposób wyrażania klas abstrakcyjnych w C++. Jest to słowo kluczowe wprowadzone jako element sprofilowania języka C++/CLI dla platformy .NET. nie, musisz mieć co najmniej jedną czystą funkcję wirtualną w klasie, aby była abstrakcyjna.

klasa SomeClass { public: virtual void pure_virtual() = 0; // czysta wirtualna funkcja

};

Powiązane problemy