<?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[Zwei Fragen zu möglichen Schreibarten in C++]]></title><description><![CDATA[<p>Hallo,<br />
ich lese zur Zeit &quot;C++ für Dummies&quot; und bin bald fertig damit. Aber schon eine ganze Weile quälen mich zwei Fragen, die mir das Verständnis der Quelltexte im Buch erschweren.</p>
<p>Die erste Frage:</p>
<p>Wenn ich einen Zeiger oder eine Referenz deklariere oder als Argument in einer Funktioen erwarte, sind dann folgende Varianten bedeutungsgleich?</p>
<p>Variante 1</p>
<pre><code class="language-cpp">Testklasse *pListe[10];
//und
Funktion(Testklasse *pListe[10])
{}

//bzw.
Testklasse &amp;Objekt;
//und
Funktion(Testklasse &amp;Objekt)
{}
</code></pre>
<p>Variante 2</p>
<pre><code class="language-cpp">Testklasse* pListe[10];
//und
Funktion(Testklasse* pListe[10])
{}

//bzw.
Testklasse&amp; Objekt;
//und
Funktion(Testklasse&amp; Objekt)
{}
</code></pre>
<p>Eigentlich sind Leerzeichen usw. ja in C++-Quelltext egal, aber bei Zeigern hat ja auch:</p>
<pre><code class="language-cpp">char* pZeigerAufEtwas;
//und
*pZeigerAufEtwas = &quot;a&quot;;
</code></pre>
<p>Verschiedene Bedeutungen, nur weil das Sternchen direkt vor dem Variablennamen steht oder nach dem Typ.</p>
<p>Die Zweite Frage wäre z.B. bei folgender Klasse:</p>
<pre><code class="language-cpp">class Testklasse : public ZweiteKlasse
{
public:
    Testklasse (int Name, int Typ, char* Text, ZweiteKlasse&amp; EinObjekt)
    : DerName(Name), DerTyp(Typ), Testobjekt(EinObjekt)
    {
    //das char* Text verarbeiten
    }

protected:
int DerName;
int DerTyp;
ZweiteKlasse Testobjekt;
}
</code></pre>
<p>Hinter dem &quot;:&quot; in Zeile 5, was darf da alles genau stehen? Soweit ich das jetzt verstanden habe, darf mit man dort Variablen mit der Schreibweise Variable(Wert) Werte zuordnen und beliebige Funktionen aufrufen. Wenn man dort aber alles darf, wieso macht man es dann nicht in den geschweiften Klammern?</p>
<p>Ich hoffe jemand kann mir das erklären und meine Verwirrung ein wenig senken. Schonmal vielen Dank im Voraus, allein schon für's lesen. <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/244387/zwei-fragen-zu-möglichen-schreibarten-in-c</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 12:08:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244387.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Jun 2009 16:04:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zwei Fragen zu möglichen Schreibarten in C++ on Mon, 29 Jun 2009 16:06:06 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich lese zur Zeit &quot;C++ für Dummies&quot; und bin bald fertig damit. Aber schon eine ganze Weile quälen mich zwei Fragen, die mir das Verständnis der Quelltexte im Buch erschweren.</p>
<p>Die erste Frage:</p>
<p>Wenn ich einen Zeiger oder eine Referenz deklariere oder als Argument in einer Funktioen erwarte, sind dann folgende Varianten bedeutungsgleich?</p>
<p>Variante 1</p>
<pre><code class="language-cpp">Testklasse *pListe[10];
//und
Funktion(Testklasse *pListe[10])
{}

//bzw.
Testklasse &amp;Objekt;
//und
Funktion(Testklasse &amp;Objekt)
{}
</code></pre>
<p>Variante 2</p>
<pre><code class="language-cpp">Testklasse* pListe[10];
//und
Funktion(Testklasse* pListe[10])
{}

//bzw.
Testklasse&amp; Objekt;
//und
Funktion(Testklasse&amp; Objekt)
{}
</code></pre>
<p>Eigentlich sind Leerzeichen usw. ja in C++-Quelltext egal, aber bei Zeigern hat ja auch:</p>
<pre><code class="language-cpp">char* pZeigerAufEtwas;
//und
*pZeigerAufEtwas = &quot;a&quot;;
</code></pre>
<p>Verschiedene Bedeutungen, nur weil das Sternchen direkt vor dem Variablennamen steht oder nach dem Typ.</p>
<p>Die Zweite Frage wäre z.B. bei folgender Klasse:</p>
<pre><code class="language-cpp">class Testklasse : public ZweiteKlasse
{
public:
    Testklasse (int Name, int Typ, char* Text, ZweiteKlasse&amp; EinObjekt)
    : DerName(Name), DerTyp(Typ), Testobjekt(EinObjekt)
    {
    //das char* Text verarbeiten
    }

protected:
int DerName;
int DerTyp;
ZweiteKlasse Testobjekt;
}
</code></pre>
<p>Hinter dem &quot;:&quot; in Zeile 5, was darf da alles genau stehen? Soweit ich das jetzt verstanden habe, darf mit man dort Variablen mit der Schreibweise Variable(Wert) Werte zuordnen und beliebige Funktionen aufrufen. Wenn man dort aber alles darf, wieso macht man es dann nicht in den geschweiften Klammern?</p>
<p>Ich hoffe jemand kann mir das erklären und meine Verwirrung ein wenig senken. Schonmal vielen Dank im Voraus, allein schon für's lesen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1734623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734623</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Mon, 29 Jun 2009 16:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Fragen zu möglichen Schreibarten in C++ on Mon, 29 Jun 2009 16:30:15 GMT]]></title><description><![CDATA[<p>Frage 1: Ist genau das gleiche. Was sinnvoller ist, ist wohl eine philosophische Frage.</p>
<p>Frage 2: Das hinter dem : nennt sich Initialisierungsliste und dient zum erstmaligen initialisieren von Member Variablen einer Klasse. Du darfst hier ausschließlich Variablen einer Klasse mit ihrem Konstruktor initialisieren.<br />
Funktionen dürfen nicht aufgerufen werden.<br />
Der Vorteil ist, du kannst hier auch const Variablen initialisieren:</p>
<pre><code class="language-cpp">class Foo
{
   private:
   const int bar; // kann hier nicht initialisiert werden

   public:
   Foo()
   : bar(5) // initialisiert bar mit 5
   {
      // Rest vom Code
   }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1734632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734632</guid><dc:creator><![CDATA[blub* 0]]></dc:creator><pubDate>Mon, 29 Jun 2009 16:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Fragen zu möglichen Schreibarten in C++ on Mon, 29 Jun 2009 16:33:08 GMT]]></title><description><![CDATA[<p>Zur ersten Frage:<br />
Die beiden Varianten sind bedeutungsgleich. Allerdings bevorzuge ich die Variante mit dem Asterisk (*) direkt vor dem Variablennamen, denn sonst könnte man leicht folgende (falsche) Schlussfolgerung ziehen:</p>
<pre><code class="language-cpp">char* str1, str2; // str1 vom Typ char*, str2 vom Typ char; man denkt, beide seien vom Typ char*
char *str1, *str2; // beide vom Typ char*
</code></pre>
<p>Zur zweiten Frage:<br />
Hinter dem : kannst du durch Komma getrennt einerseits Membervariablen mit einem Wert (auch Rückgabewerte von Funktionen sind möglich) oder auch die Konstruktoren der Basis-Klassen (in deinem Beispiel könntest du auch noch <code>... Testklasse () : ZweiteKlasse (parameter, fuer, Konstruktor, von, ZweiteKlasse) {}</code> schreiben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734633</guid><dc:creator><![CDATA[devkid]]></dc:creator><pubDate>Mon, 29 Jun 2009 16:33:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Fragen zu möglichen Schreibarten in C++ on Mon, 29 Jun 2009 16:33:30 GMT]]></title><description><![CDATA[<p>Beide Varianten bewirken dasselbe.</p>
<blockquote>
<pre><code class="language-cpp">char* pZeigerAufEtwas;
//und
*pZeigerAufEtwas = &quot;a&quot;;
</code></pre>
</blockquote>
<p>Der Vergleich zieht nicht ganz, da * hier zwar zwei unterschiedliche Bedeutungen hat, aber Leerzeichen hier ebenfalls keine Rolle spielen.<br />
Muss übrigens 'a' lauten (einzelnes Zeichen).</p>
<p>Die Liste nach dem Doppelpunkt nennt sich Initialisierungsliste. Damit kannst du verhindern, dass der Standardkonstruktor der Objekte aufgerufen wird und kannst stattdessen einen anderen benutzen (auch für die Vorfahrklasse). Funktionen kann man in der Initialisierungliste aber nicht (direkt) aufrufen (wäre mir jedenfalls neu).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734635</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Mon, 29 Jun 2009 16:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Fragen zu möglichen Schreibarten in C++ on Mon, 29 Jun 2009 16:38:57 GMT]]></title><description><![CDATA[<p>Little Programmer schrieb:</p>
<blockquote>
<p>Wenn ich einen Zeiger oder eine Referenz deklariere oder als Argument in einer Funktioen erwarte, sind dann folgende Varianten bedeutungsgleich?</p>
</blockquote>
<p>Ja, das ist Geschmackssache.</p>
<p>Little Programmer schrieb:</p>
<blockquote>
<p>Hinter dem &quot;:&quot; in Zeile 5, was darf da alles genau stehen? Soweit ich das jetzt verstanden habe, darf mit man dort Variablen mit der Schreibweise Variable(Wert) Werte zuordnen und beliebige Funktionen aufrufen. Wenn man dort aber alles darf, wieso macht man es dann nicht in den geschweiften Klammern?)</p>
</blockquote>
<p>Diese Auflistung der Attribute (Membervariablen) einer Klasse ist die Initialisierungsliste. Dort kannst und solltest(!) Du allen Attributen einer Klasse einen Anfangswert zuweisen. Wenn Du es nicht machst, werden (wenn vorhanden) die Standardkonstruktoren der einzelnen Attribute aufgerufen.<br />
Wenn Du die Initialisierungsliste nicht schreibst, wird sie also trotzdem erzeugt und du würdest doppelt die Attribute initialisieren, wenn Du es innerhalb der geschweiften Klammern machst.<br />
Du kannst aber keine lokalen Variablen, die Du im Konstruktor verwendest dort initialisieren, sondern nur die Attribute der Klasse.<br />
Referenzen (KlassenName&amp;) und Paramterübergabe an die Basisklasse(n) kannst Du z.B. NUR in der Initialisierungsliste initialisieren.</p>
<p>Also immer die Initialisierungsliste verwenden und die Attribute dort in der gleichen Reihenfolge, wie sie (im Header-File z.B.) deklariert wurden auflisten, da entscheidend ist, in welcher Reihenfolge sie deklariert wurden, und nicht in welcher Reihenfolge sie in der Initialisierungsliste auftauchen. Könnte zu ungewollten Effekten führen, wenn die Reihenfolge wichtig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734636</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Mon, 29 Jun 2009 16:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Fragen zu möglichen Schreibarten in C++ on Mon, 29 Jun 2009 16:35:12 GMT]]></title><description><![CDATA[<p>devkid schrieb:</p>
<blockquote>
<p>Zur ersten Frage:<br />
Die beiden Varianten sind bedeutungsgleich. Allerdings bevorzuge ich die Variante mit dem Asterisk (*) direkt vor dem Variablennamen, denn sonst könnte man leicht folgende (falsche) Schlussfolgerung ziehen:</p>
<pre><code class="language-cpp">char* str1, str2; // str1 vom Typ char*, str2 vom Typ char; man denkt, beide seien vom Typ char*
char *str1, *str2; // beide vom Typ char*
</code></pre>
</blockquote>
<p>Sehe ich auch so, auch wenn ich prinzipiell nichts davon halte in einer Zeile mehrere Variablen zu deklarieren.</p>
<p>devkid schrieb:</p>
<blockquote>
<p>Zur zweiten Frage:<br />
Hinter dem : kannst du durch Komma getrennt einerseits Membervariablen mit einem Wert (auch Rückgabewerte von Funktionen sind möglich) oder auch die Konstruktoren der Basis-Klassen (in deinem Beispiel könntest du auch noch <code>... Testklasse () : ZweiteKlasse (parameter, fuer, Konstruktor, von, ZweiteKlasse) {}</code> schreiben).</p>
</blockquote>
<p>Stimmt, das mit dem Konstruktor der Basisklasse habe ich völlig vergessen. Obwohl das ja wohl eigentlich mit die wichtigste Aufgabe ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    />.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734638</guid><dc:creator><![CDATA[blub* 0]]></dc:creator><pubDate>Mon, 29 Jun 2009 16:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Fragen zu möglichen Schreibarten in C++ on Mon, 29 Jun 2009 16:43:22 GMT]]></title><description><![CDATA[<p>Ich glaube mit:</p>
<p>Little Programmer schrieb:</p>
<blockquote>
<p>[...]Hinter dem &quot;:&quot; in Zeile 5, was darf da alles genau stehen? Soweit ich das jetzt verstanden habe, darf mit man dort Variablen mit der Schreibweise Variable(Wert) Werte zuordnen <strong>und beliebige Funktionen aufrufen</strong>[...]</p>
</blockquote>
<p>meinte der Threadersteller sowas hier:</p>
<pre><code class="language-cpp">int GibMirFuenf()
{
	return 5;
}

class Klasse {
public:
	Klasse(): m_variable(GibMirFuenf()) { }
private:
	int m_variable;
};
</code></pre>
<p>Und ja, solche Funktionsaufrufe funktionieren ;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734642</guid><dc:creator><![CDATA[Mizar]]></dc:creator><pubDate>Mon, 29 Jun 2009 16:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Fragen zu möglichen Schreibarten in C++ on Mon, 29 Jun 2009 16:57:08 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure ganzen Antworten, jetzt ist mir das alles ein wenig klarer geworden :).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734645</guid><dc:creator><![CDATA[Little Programmer]]></dc:creator><pubDate>Mon, 29 Jun 2009 16:57:08 GMT</pubDate></item></channel></rss>