(które mogą zmienić jego wartość w trakcie programu)
A może „instancja czegoś” jest ściśle związana z klasami i przedmiotami? Jeśli tak, to jak zdefiniowałbyś pojęcie „zmiennej”, jeśli chodzi o C ++?
(które mogą zmienić jego wartość w trakcie programu)
A może „instancja czegoś” jest ściśle związana z klasami i przedmiotami? Jeśli tak, to jak zdefiniowałbyś pojęcie „zmiennej”, jeśli chodzi o C ++?
Odpowiedzi:
O ile mi wiadomo, prawidłowe jest wywoływanie wartości instancji typów pierwotnych tego typu (patrz na przykład „System typów C ++” z podręcznika Visual Studio, ale wciąż szukam innego źródła), chociaż uważam, że ten termin to najczęściej używany podczas omawiania przedmiotów. Obiekt jest instancją klasy C, jeśli został zbudowany z konstruktora zdefiniowanego w klasie C lub jednej z jego podklas.
Zmienna w C ++ nie jest pojęciem środowiska wykonawczego. Istnieje w twoim kompilatorze jako leksykalne powiązanie między nazwą zmiennej a abstrakcyjną (zmienną, jeśli nie stałą) lokalizacją. Po kompilacji programu zmiennych już nie ma. Zamiast tego dane są odczytywane i zapisywane w rejestrach, pamięci itp.
int
. Standard C ++ nie rozróżnia typów pierwotnych i typów innych niż pierwotne, mówiąc o tym, co robią deklaracje zmiennych. T t;
Deklaruje więc obiekt typu T
, bez względu na to, jaki typ się T
stanie.
A może „instancja czegoś” jest ściśle związana z klasami i przedmiotami? Jeśli tak, to jak zdefiniowałbyś pojęcie „zmiennej”, jeśli chodzi o C ++?
Mówiąc tak zwięźle, jak to możliwe dla C ++
Żeby było jasne:
malloc()
jednak rację , mówiąc o nowo utworzonym , ale niezainicjowanym buforze: jest to obszar pamięci, który nie jest jeszcze obiektem. Podobnie obiekt, który został jawnie zniszczony: jest to obszar pamięci, który nie jest już obiektem.
Co znaczy „poprawne”?
Jeśli chcemy być wobec tego bardzo surowi, musimy rozróżnić:
Tak więc zmienna samopoczucie wyrazem, by mieć typ. Jego wartość - obiekt, do którego się odnosi - byłaby instancją jakiejś klasy. I zauważ, że typ zmiennej i klasa obiektu nie są zasadniczo tym samym - typ statyczny zmiennej nakłada górną granicę na klasy środowiska wykonawczego obiektów, więc klasy muszą być podtypem klasy, która odpowiada typowi.
Czy chcesz cały czas powtarzać ten duży kęs? Na pewno nie. To, jak ściśle i luźno chcemy rozmawiać, zależy od kontekstu. Tak często nie ma problemu ze stwierdzeniem, że „zmienna jest instancją tego typu”. Tak naprawdę dzieje się tak, że używamy zmiennej i typu metonimicznie w odniesieniu do obiektu i nadklasy jego klasy wykonawczej.
Chyba że chcesz spędzić całe życie w puryzmie i sofizmie ... tak.
Za każdym razem, gdy przechowujesz coś, co jest jednoznacznie zidentyfikowane, wykorzystujesz do tworzenia innych niepowtarzalnie identyfikowalnych rzeczy, które wykonujesz.
Niektóre z tych instancji mogą mieć dokładniejsze nazwy, ale ogólnie to działa.
Wiele osób rezerwuje „instancję” na instancje zajęć. Jeśli zrobisz to wtedy w C ++, zmienna może być instancją klasy, referencją do instancji, wskaźnikiem do instancji lub typem prymitywnym (prawdopodobnie w tym kontekście struktury są liczone jako klasy, są prawie całkowicie to samo). W Javie lub Objective-C zmienne nigdy nie byłyby instancjami, ale prawdopodobnie byłyby odwołaniami do instancji.
Zapomniałem: przez krótki czas wskaźnik C ++ może być wskaźnikiem do surowej pamięci, na przykład „to”, zanim konstruktor zacznie działać. W tym momencie prawdopodobnie nie nazwałbyś tego * instancją.