Czy możemy napisać słowo kluczowe abstrakcyjne w klasie C++?Czy mogę użyć słowa kluczowego `abstract` w klasie C++?
Odpowiedz
Nie, C++ nie zawiera słów kluczowych. Możesz jednak napisać: pure virtual functions; to jest sposób wyrażania klas abstrakcyjnych w C++.
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.
Jest to słowo kluczowe wprowadzone jako element sprofilowania języka C++/CLI dla platformy .NET.
... która nie jest C++. Poważnie, ref, to jest encroachment ... – DevSolar
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++. –
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
Nie, musisz mieć co najmniej jedną czystą funkcję wirtualną w klasie, aby była abstrakcyjna.
Oto dobre referencje cplusplus.com
#define abstract
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.
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()
{
}
};
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
'abstract' nie jest częścią standardu C++. – smerlin
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. –
@cz Co osiąga '#define abstract'? –
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++.
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
};
- 1. Czy możesz użyć słowa kluczowego params w delegacie?
- 2. Czy możesz użyć słowa kluczowego C#, aby rozwinąć właściwości w interfejsie?
- 3. Alternatywy dla słowa kluczowego "using" w C#?
- 4. Czy istnieje odpowiednik słowa kluczowego C# "var" w C++/CLI?
- 5. Java: czy powinienem użyć "tego" słowa kluczowego lub przedrostka "m_"?
- 6. Równoważnik słowa kluczowego Super w C#
- 7. Kiedy, jeśli w ogóle, użyć słowa kluczowego "is" w Pythonie?
- 8. Czy zmiana definicji słowa kluczowego w C++ jest legalna?
- 9. Odpowiednik C++/CLI słowa kluczowego C# 'readonly'
- 10. Dlaczego używamy zmiennego słowa kluczowego w C++?
- 11. Dlaczego nie można użyć niebezpiecznego słowa kluczowego w kontekście iteratora?
- 12. Możliwy błąd w obsłudze słowa kluczowego `default` w VS2015 C++
- 13. C# Wzory użycia słowa kluczowego "is"
- 14. dlaczego nie mogę użyć słowa kluczowego auto w ostatniej wersji gcc
- 15. Czy ten przykład użycia słowa kluczowego "C++" jest poprawny?
- 16. Czy brak asynchronicznego słowa kluczowego w interfejsach powoduje przerwanie DI w C# 5.0?
- 17. Czy istnieje odpowiednik Javy dla sprawdzanego słowa kluczowego C#?
- 18. Czy funkcje inline C++ GCC nie zawierają słowa kluczowego "inline"?
- 19. Cuda słowa kluczowego yield
- 20. Jak najlepiej używać słowa kluczowego const w C?
- 21. Czy zawsze musimy używać asynchronicznego słowa kluczowego?
- 22. Dlaczego warto używać słowa kluczowego globalnego w języku C#?
- 23. Z WYJĄKTU słowa kluczowego w Oracle
- 24. Używanie domyślnego słowa kluczowego w bibliotece DLL
- 25. Jak mogę pozbyć się słowa kluczowego `this` w lokalnych funkcjach?
- 26. Zasady korzystania z słowa kluczowego restrict w języku C?
- 27. Co to jest odpowiednik VB.NET domyślnego słowa kluczowego C#?
- 28. Deklarowanie pole listy z końcowym słowa kluczowego
- 29. Optymalizacje dla końcowego słowa kluczowego
- 30. Jaki jest pożytek ze słowa kluczowego `default` w języku C#?
Oczywiście, możemy to zrobić. Niestety kod się nie skompiluje, chociaż =) – SadSido
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
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. –