class A
{
A a;//why can't we do this
};
Odpowiedz
Można zrobić
class A {
A* a;
}
ponieważ nie wymaga znajomości wielkości A.
A a;//why can't we do this
Ponieważ A
jest niekompletny typu, ponieważ nie została jeszcze określona, a to jest zdefiniowane. I kompilator musi znać pełną typ A
gdy widzi go wewnątrz class A
, a od A
jest niekompletna, to nie może określić jego rozmiar, to nie może określić ile miejsca zmienna członkiem a
zamierza podjąć w związku z tym to go nie skompiluje.
Ale ponieważ rozmiar wskaźnika jest dobrze znany kompilatorowi, bez względu na to, jaki typ wskaźnika jest. Można zdefiniować wskaźnik w swojej klasie tak:
class A
{
A *pA; //okay since sizeof(pA) == sizeof(void*) == well-known to the compiler!
};
Demo online: http://www.ideone.com/oS5Ir
Ponieważ klasa byłaby nieskończona wielkości.
(Odbywa się to język mądry, określając nie można mieć niepełnych typów jako członkowie, tylko odwołać lub wskaźniki do nich, i że A
jest niekompletny typ do końca definicji klasy).
A co jeśli ma on nieskończony rozmiar? W dzisiejszych czasach pamięć jest tania! –
@ James: Przypomina mi faceta, który chciał napisać program, który tworzy każde możliwe słowo składające się z 23 liter i nie wzdrygnął się, gdy powiedziałem mu, że do tego potrzeba ponad miliona dysków TB ... – EboMike
Rozumiem, że pochodzisz z Javy lub coś takiego? A a
utworzy pełną instancję typu A
, która, dobrze, zawiera A
, która zawiera A
, która zawiera A
.
Pewnie myślisz o tym:
class A
{
A *a; // A pointer to A, not a full instance
};
W C++: Ty nie może tego zrobić, ponieważ będzie to struktura rekursywna (bez końca dla obliczania wielkości obiektu), Aby pokonać ten problem,
Użyj własnego Referenta ial Wskaźnik, np. wskaźnik o adresie typu tej samej klasy.
class A
{
A* aObj; // Self Referential Pointer
}
W ten sposób można mieć wskaźnik do obiektu klasy A i w ten sposób nie jest wymagane, aby poznać rozmiar klasy A zanim zostanie ogłoszony w czasie kompilacji.
class A {
A* a;
};
Class Date
{
int d,m,y;
static Date default_date;
};
Ten przykład podano w "Bjarne Stroustrup C++ Programming Language - 3rd Edition".
I działa ... Niektóre wyjaśnienia byłyby miłe.
- 1. Dlaczego nie możemy zadeklarować aliasów nazw w klasie?
- 2. Dwa typy tej samej klasy w klasie obiektu encja
- 3. Utwórz wątek w klasie z funkcją z tej samej klasy.
- 4. Punkty referencji klasy do innego elementu w tej samej klasie
- 5. Dlaczego konstruktor i główna metoda w tej samej klasie?
- 6. Metody obiektu tej samej klasy mają ten sam identyfikator?
- 7. Sprawdź, czy metoda istnieje w tej samej klasie.
- 8. Przeciążanie operatora <i operatora> w tej samej klasie
- 9. Klasy abstrakcyjne, dlaczego nie możemy zadeklarować prywatnego członka klasy val i var?
- 10. Wywołanie konstruktora z innego konstruktora w tej samej klasie
- 11. Dlaczego możemy mieć statyczne końcowe elementy, ale nie możemy mieć statycznej metody w wewnętrznej klasie?
- 12. Wywołanie funkcji prywatnej w tej samej klasie python
- 13. Korzystanie rodzajowy interfejs kilka razy w tej samej klasie
- 14. Wywołanie metody z innej metody w tej samej klasie PHP
- 15. W javascript, w jaki sposób wywołać metodę klasy z innej metody w tej samej klasie?
- 16. Java - gra liczbowa - wiele ActionListener w tej samej klasie
- 17. Zmiana koloru tła wszystkich elementów o tej samej klasie
- 18. Dlaczego nie możemy zadeklarować var a = new List <string> na poziomie klasy?
- 19. Zagnieżdżona blokada dla tej samej wydajności obiektu
- 20. ma_nowy związek do tej samej klasy
- 21. Shuffle wszystko div z tej samej klasy
- 22. dlaczego ochrona nie chroni członka w tej klasie?
- 23. Python 2.x - tworzenie statycznej instancji klasy w tej samej klasie
- 24. C# Użyj pola lub właściwości wewnątrz tej samej klasy
- 25. Dlaczego dane wejściowe i wybrane nie mają tej samej szerokości?
- 26. Czy możemy przeciążyć zachowanie obiektu klasy
- 27. członek prywatny dostępny z innych instancji tej samej klasy
- 28. style Drugi element na stronie o tej samej klasie
- 29. Dlaczego można zadeklarować struct i non-struct o tej samej nazwie?
- 30. Jersey @Path dla liczby mnogiej rzeczowników/Single Spoczywaj w tej samej klasie
Co stanie się, gdy zostanie utworzona taka klasa? Budowałby A, który konstruuje kolejne A, i tak dalej, aż do końca czasu. Tak, tak, konstruktor, który sprawia, że przepełnienie stosu nie jest dobrą rzeczą. Och, tak, a instancja miałaby nieskończony rozmiar. –
To żółwie do samego końca. – jason