(das kann seinen Wert im Laufe des Programms ändern)
Oder ist 'Instanz von etwas' eng mit Klassen und Objekten verbunden? Wenn ja, wie würden Sie das Konzept der 'Variablen' in Bezug auf C ++ definieren?
(das kann seinen Wert im Laufe des Programms ändern)
Oder ist 'Instanz von etwas' eng mit Klassen und Objekten verbunden? Wenn ja, wie würden Sie das Konzept der 'Variablen' in Bezug auf C ++ definieren?
Antworten:
Soweit ich weiß, ist es richtig, Werte von Instanzen primitiver Typen dieses Typs aufzurufen (siehe zum Beispiel "C ++ Type System" aus dem Visual Studio-Handbuch, aber ich suche immer noch nach einer anderen Quelle), obwohl ich glaube, dass dies der Fall ist Wird meistens bei der Diskussion von Objekten verwendet. Ein Objekt ist eine Instanz einer Klasse C, wenn es aus einem Konstruktor erstellt wurde, der entweder in Klasse C oder einer seiner Unterklassen definiert ist.
Eine Variable in C ++ ist kein Laufzeitkonzept. Es existiert in Ihrem Compiler als lexikalische Bindung zwischen dem Namen der Variablen und einem abstrakten (veränderlichen, wenn nicht konstanten) Speicherort. Sobald ein Programm kompiliert ist, sind keine Variablen mehr vorhanden. Stattdessen werden Daten in Registern, Speicher usw. gelesen und geschrieben.
int
. Der C ++ - Standard unterscheidet nicht zwischen primitiven und nicht primitiven Typen, wenn es darum geht, was Variablendeklarationen tun. So T t;
erklärt ein Objekt vom Typ T
, egal welche Art T
sein geschieht.
Oder ist 'Instanz von etwas' eng mit Klassen und Objekten verbunden? Wenn ja, wie würden Sie das Konzept der 'Variablen' in Bezug auf C ++ definieren?
Um es für C ++ so kurz wie möglich zu halten
Nur um das klar zu stellen:
malloc()
, aber nicht initialisierten Puffer sprechen : Es ist ein Speicherbereich, der noch kein Objekt ist. Ebenso ein Objekt, das explizit zerstört wurde: Es ist ein Speicherbereich, der kein Objekt mehr ist.
Was bedeutet "richtig"?
Wenn wir sehr streng sein wollen, müssen wir unterscheiden zwischen:
So dann ein variabler ist ein Ausdruck-würde haben einen Typ. Sein Wert - das Objekt, auf das er sich bezieht - wäre eine Instanz einer Klasse. Beachten Sie, dass der Variablentyp und die Objektklasse im Allgemeinen nicht identisch sind. Der statische Typ der Variablen legt eine Obergrenze für die Laufzeitklassen der Objekte fest, sodass die Klassen ein Untertyp der Klasse sein müssen, die dem Typ entspricht.
Möchten Sie diesen großen Schluck die ganze Zeit wiederholen? Mist nein. Wie streng oder locker wir reden wollen, hängt vom Kontext ab. So oft ist es wirklich kein Problem zu sagen, dass "die Variable eine Instanz dieses Typs ist". Was dort wirklich passiert, ist, dass wir die Variable und den Typ metonymisch verwenden, um auf das Objekt und eine Oberklasse seiner Laufzeitklasse zu verweisen.
Es sei denn, Sie möchten Ihr ganzes Leben in Purismus und Sophismus verbringen ... ja.
Jedes Mal, wenn Sie etwas behalten, das eindeutig identifiziert wurde, können Sie andere eindeutig identifizierbare Dinge fälschen , die Sie instanziieren.
Einige dieser Instanziierungen haben möglicherweise genauere Namen, aber im Allgemeinen funktioniert dies.
Viele Leute reservieren "Instanz" für Instanzen von Klassen. Wenn Sie dies dann in C ++ tun, kann eine Variable eine Instanz einer Klasse, ein Verweis auf eine Instanz, ein Zeiger auf eine Instanz oder ein primitiver Typ sein (Sie würden in diesem Kontext wahrscheinlich Strukturen als Klassen zählen, das sind sie fast ganz das gleiche). In Java oder Objective-C wären Variablen niemals Instanzen, sondern möglicherweise Verweise auf Instanzen.
Vergessen: Für kurze Zeit kann ein C ++ - Zeiger ein Zeiger auf den Rohspeicher sein, z. B. "this", bevor der Konstruktor mit der Ausführung beginnt. Sie würden * dies zu diesem Zeitpunkt wahrscheinlich noch nicht als Instanz bezeichnen.