<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Unterschiede Datentyp* Name und Datentyp Name]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe irgendwie noch ein wenig Probleme mit dem Verständnis von Zeigern und Objekten..</p>
<p>Annahme: Es existiert eine Klasse &quot;Karte&quot;.</p>
<p>Was genau läuft nun ab bei:</p>
<pre><code class="language-cpp">Karte map;
Karte* map2; // Karte* map = Karte *map -&gt; ist dies das Gleiche?
</code></pre>
<p>Die erste Anweisung weißt map was zu? Eine Adresse oder wie kann ich es verstehen?</p>
<p>Die zweite Anweisung erstellt doch einen Zeiger, der auf ein Objekt des Datentyps Karte greift.</p>
<p>Inwieweit unterscheidet sich die Mächtigkeit und Verarbeitung beider genertierter Variablen sowie die Gültigkeit?<br />
Verstehe ich es richtig dass ich den Zeiger zB an einen anderen Zeiger (z.B. in einem anderen Objekt) übergeben kann, und dann innerhalb des neuen Objektes map2 manipulieren kann und diese Änderungen &quot;global&quot; quasi für alle, die die Adresse von map2 kennen gelten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282557/unterschiede-datentyp-name-und-datentyp-name</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 01:41:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282557.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Feb 2011 09:53:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 09:53:47 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe irgendwie noch ein wenig Probleme mit dem Verständnis von Zeigern und Objekten..</p>
<p>Annahme: Es existiert eine Klasse &quot;Karte&quot;.</p>
<p>Was genau läuft nun ab bei:</p>
<pre><code class="language-cpp">Karte map;
Karte* map2; // Karte* map = Karte *map -&gt; ist dies das Gleiche?
</code></pre>
<p>Die erste Anweisung weißt map was zu? Eine Adresse oder wie kann ich es verstehen?</p>
<p>Die zweite Anweisung erstellt doch einen Zeiger, der auf ein Objekt des Datentyps Karte greift.</p>
<p>Inwieweit unterscheidet sich die Mächtigkeit und Verarbeitung beider genertierter Variablen sowie die Gültigkeit?<br />
Verstehe ich es richtig dass ich den Zeiger zB an einen anderen Zeiger (z.B. in einem anderen Objekt) übergeben kann, und dann innerhalb des neuen Objektes map2 manipulieren kann und diese Änderungen &quot;global&quot; quasi für alle, die die Adresse von map2 kennen gelten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024596</guid><dc:creator><![CDATA[Stefan_B]]></dc:creator><pubDate>Tue, 22 Feb 2011 09:53:47 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 10:01:19 GMT]]></title><description><![CDATA[<p>map ist ein Objekt des Typs 'Karte'. map2 ist ein Zeiger auf ein Objekt des Types 'Karte', der aber noch auf kein Objekt zeigt. Im Normalfall solltest du Zeiger immer sofort mit einer Adresse initialisieren, wenn der Zeiger auf kein Objekt zeigen soll, schreib:</p>
<pre><code class="language-cpp">Karte* map2 = 0;
</code></pre>
<p>Soll er auf ein Objekt zeigen, dann musst du die Adresse des Objekts holen:</p>
<pre><code class="language-cpp">Karte* map2 = &amp;map;
</code></pre>
<p>Wo du den Stern zwischen Karte und map2 schreibst, ist egal.</p>
<p>Du kannst dir einen Zeiger auch wie einen Link auf einer Internet-Seite vorstellen. Der Link &quot;zeigt&quot; auf eine Seite (Adresse), und die Seite, auf die der Link verweist, lässt sich ändern. Genauso kann sich etwas am Inhalt der Seite selbst ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024600</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 22 Feb 2011 10:01:19 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 10:04:57 GMT]]></title><description><![CDATA[<p>Okay, das hab ich verstanden.</p>
<p>In einer Klassendefinition kann ich das jedoch leider noch nicht initialisieren. Das bedeutet, es macht immer Sinn den Standardkonstruktor zu überschreiben und sich um diese Abhandlung zu kümmern?</p>
<pre><code class="language-cpp">class Foo
{
private: Karte* map2;

public: Karte(void){
map = new Karte(); // oder auch 0 für null Pointer?
}
};
</code></pre>
<p>Muss der Aufruf über new geschehen? Andernfalls geht es nur über ein Objekt und dessen Adresse über den &amp;-Operator bzw. Zeiger = anderer_Zeiger; ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024605</guid><dc:creator><![CDATA[Stefan_B]]></dc:creator><pubDate>Tue, 22 Feb 2011 10:04:57 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 10:08:17 GMT]]></title><description><![CDATA[<p>Das kommt auf deinen Konkreten Anwendungsfall an, in den seltensten Fällen wirst du new brauchen. (Übrigens kannst du bei new die () auch weglassen) Je nach Klasse kann es Sinn machen, mit 0 zu initialisieren oder mit einer Adresse eines Objekts.</p>
<p>Weiters brauchst du das void im Konstruktor nicht, das ist C.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024609</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 22 Feb 2011 10:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 10:18:07 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wo du den Stern zwischen Karte und map2 schreibst, ist egal.</p>
</blockquote>
<p>Semantisch sind natürlich beide Formen gleichwertig. Allerdings ist die zweite Variante zu bevorzugen. Eine Deklaration besteht unter anderem aus den Teilen declaration-specifier-sequence und init-declarator-list. Hier ist Karte Teil der decl-spec-sequ und *map2 ist einziger declarator der init-decl-list, wobei der * ein operator des declarators ist.</p>
<p>Anderenfalls würde beispielsweise</p>
<pre><code class="language-cpp">Karte* map2, map3;
</code></pre>
<p>suggerieren, dass sowohl map2 als auch map3 Zeiger sind, was aber nicht der Fall ist. Nur map2 ist hier ein Zeiger.</p>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Weiters brauchst du das void im Konstruktor nicht, das ist C.</p>
</blockquote>
<p>Nö - das ist völlig in Ordnung nur nicht notwendig, da beim Weglassen implizit void verwendet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024610</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Tue, 22 Feb 2011 10:18:07 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 10:19:55 GMT]]></title><description><![CDATA[<p>Dein Einwand ist richtig, ich bevorzuge jedoch erstere Variante, da der * für mich zum Typ gehört. (auch wenn der Standard sagt, dass dem nicht so ist) Mehrere Zeiger in einer Deklaration habe ich bisher nicht benötigt, daher sehe ich auch keinen Grund auf die zweite Variante zu wechseln.</p>
<p>void als Parameter schreiben empfinde ich als äußerst hässlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024615</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 22 Feb 2011 10:19:55 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 10:21:46 GMT]]></title><description><![CDATA[<p>inter2k3 schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wo du den Stern zwischen Karte und map2 schreibst, ist egal.</p>
</blockquote>
<p>Semantisch sind natürlich beide Formen gleichwertig. Allerdings ist die zweite Variante zu bevorzugen. (...)</p>
</blockquote>
<p>Also das ist mir entschieden zu absolut formuliert.<br />
Und ich bin auch anderer Meinung.</p>
<p>Ich schreibe den * immer zum Typ dazu, und nie zum Namen, da es für mich logisch ein Teil des Typs ist.<br />
Wenn man nie mehrere Variablen gleichzeitig definiert funktioniert das auch wunderbar.<br />
Und genau so mache ich es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024617</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 22 Feb 2011 10:21:46 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 10:36:34 GMT]]></title><description><![CDATA[<p>Also muss man beachten dass eine Deklaration von</p>
<pre><code class="language-cpp">Karte* map1,map2
</code></pre>
<p>nicht die Deklaration von 2 Pointern auf ein Karte-Objekt ist, sondern map1 ein Pointer und map2 nur ein normales Objekt?</p>
<p>Das void bin ich von C gewohnt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Und das mit dem new:</p>
<p>Würde ich dann nun haben:</p>
<pre><code class="language-cpp">class Foo
{
private: Karte* map2;

public: Karte(void){
map = Karte; // oder auch 0 für null Pointer?
}
};
</code></pre>
<p>Würde das map auch mit einer Adresse eines gerade frisch angelegten Objektes von Karte beliefern? Ist hier der Unterschied mit dem Erzeugungszeitpunkt zu suchen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024623</guid><dc:creator><![CDATA[Stefan_B]]></dc:creator><pubDate>Tue, 22 Feb 2011 10:36:34 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 10:47:55 GMT]]></title><description><![CDATA[<p>Richtig, das erste ist ein Zeiger, das zweite nicht.</p>
<p>Das void schreibt man in C++ üblicherweise nicht mehr hin, du kannst es machen, wenn du möchtest.</p>
<p>Es müsste dann Karte() heißen. Beachte: Wenn du ein Objekt auf dem Stack erstellen möchtest, muss es 'Class()' heißen, auf dem Heap kannst du die () weglassen. Ist Geschmackssache, ich mache es ohne.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024625</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 22 Feb 2011 10:47:55 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 12:44:36 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Wenn man nie mehrere Variablen gleichzeitig definiert funktioniert das auch wunderbar.<br />
Und genau so mache ich es.</p>
</blockquote>
<p>Also bei mir kommt es häufiger vor, dass ich zwei Zeiger gleichzeitig definiere. Ich verwende auch Variante1, aber musste in diesem Fall zu Variante2 greifen. Was schlägst Du in so einem Fall vor? Zwei getrennte Definitionen machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024678</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 22 Feb 2011 12:44:36 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 13:19:32 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Wenn man nie mehrere Variablen gleichzeitig definiert funktioniert das auch wunderbar.<br />
Und genau so mache ich es.</p>
</blockquote>
<p>Also bei mir kommt es häufiger vor, dass ich zwei Zeiger gleichzeitig definiere. Ich verwende auch Variante1, aber musste in diesem Fall zu Variante2 greifen. Was schlägst Du in so einem Fall vor? Zwei getrennte Definitionen machen?</p>
</blockquote>
<p>Genau.<br />
Eine Definition pro Zeile. Mache ich überall so, funktioniert wunderbar.<br />
Und ich mache das nicht nur bei Zeigern oder Referenzen so, sondern immer.</p>
<pre><code class="language-cpp">void foo()
{
   int x = ...;
   int y = ...;
   int z = x + y + 42;
   // ...
}
</code></pre>
<p>Ich finde das schön klar und übersichtlich. Man muss nicht immer überall die kürzest mögliche Schreibweise wählen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024698</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 22 Feb 2011 13:19:32 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschiede Datentyp* Name und Datentyp Name on Tue, 22 Feb 2011 13:30:26 GMT]]></title><description><![CDATA[<p>Das ist doch einfach eine Stilfrage. Solange du dabei konsistent handelst ist beides ok.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024708</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Tue, 22 Feb 2011 13:30:26 GMT</pubDate></item></channel></rss>