<?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[Frage zur Variablen Initialisierung im Konstruktor]]></title><description><![CDATA[<p>Hallo ist es besser die Variablen Zuweisung in der Klasse zu schreiben oder außerhalb der Klasse ?</p>
<p>( Variablen zuweisung in der Klasse )</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class autos
{

        private:
                int speed;
                char *marke;

        public:
                void wagen1 ();

        autos( int s  , char *m)
        {
                speed = s;
                marke = m;

        }

        ~autos()
        { cout &lt;&lt;&quot;dest&quot; &lt;&lt; endl; }

};

void autos :: wagen1()
{
 cout&lt;&lt;&quot;Geschwindigkeit: &quot; &lt;&lt; speed &lt;&lt; endl;
 cout&lt;&lt;&quot;Marke: &quot; &lt;&lt; marke &lt;&lt; endl;
}

int main()
{

        {
        autos aut ( 100 , &quot;test&quot;);
        aut.wagen1();
        }

system(&quot;PAUSE&quot;);

}
</code></pre>
<p>( Variablen zuweisung außerhalb der Klasse )</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class autos
{

        private:
                int speed;
                char *marke;

        public:
                void wagen1 ();

        autos( int  , char* ) ;

        ~autos() ;

};

autos :: autos ( int s , char *m )
{
speed = s;
marke = m;
}

autos::~autos()
{
 cout&lt;&lt;&quot;dest&quot;&lt;&lt;endl;
}

void autos :: wagen1()
{
 cout&lt;&lt;&quot;Geschwindigkeit: &quot; &lt;&lt; speed &lt;&lt; endl;
 cout&lt;&lt;&quot;Marke: &quot; &lt;&lt; marke &lt;&lt; endl;
}

int main()
{

{
autos aut ( 100 , &quot;test&quot;);
aut.wagen1();
}

system(&quot;PAUSE&quot;);

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/266053/frage-zur-variablen-initialisierung-im-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 15:44:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266053.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 May 2010 12:45:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Variablen Initialisierung im Konstruktor on Mon, 03 May 2010 12:45:47 GMT]]></title><description><![CDATA[<p>Hallo ist es besser die Variablen Zuweisung in der Klasse zu schreiben oder außerhalb der Klasse ?</p>
<p>( Variablen zuweisung in der Klasse )</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class autos
{

        private:
                int speed;
                char *marke;

        public:
                void wagen1 ();

        autos( int s  , char *m)
        {
                speed = s;
                marke = m;

        }

        ~autos()
        { cout &lt;&lt;&quot;dest&quot; &lt;&lt; endl; }

};

void autos :: wagen1()
{
 cout&lt;&lt;&quot;Geschwindigkeit: &quot; &lt;&lt; speed &lt;&lt; endl;
 cout&lt;&lt;&quot;Marke: &quot; &lt;&lt; marke &lt;&lt; endl;
}

int main()
{

        {
        autos aut ( 100 , &quot;test&quot;);
        aut.wagen1();
        }

system(&quot;PAUSE&quot;);

}
</code></pre>
<p>( Variablen zuweisung außerhalb der Klasse )</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class autos
{

        private:
                int speed;
                char *marke;

        public:
                void wagen1 ();

        autos( int  , char* ) ;

        ~autos() ;

};

autos :: autos ( int s , char *m )
{
speed = s;
marke = m;
}

autos::~autos()
{
 cout&lt;&lt;&quot;dest&quot;&lt;&lt;endl;
}

void autos :: wagen1()
{
 cout&lt;&lt;&quot;Geschwindigkeit: &quot; &lt;&lt; speed &lt;&lt; endl;
 cout&lt;&lt;&quot;Marke: &quot; &lt;&lt; marke &lt;&lt; endl;
}

int main()
{

{
autos aut ( 100 , &quot;test&quot;);
aut.wagen1();
}

system(&quot;PAUSE&quot;);

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1891722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891722</guid><dc:creator><![CDATA[speicher]]></dc:creator><pubDate>Mon, 03 May 2010 12:45:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Variablen Initialisierung im Konstruktor on Mon, 03 May 2010 12:50:49 GMT]]></title><description><![CDATA[<p>Das ist völlig egal^^ Das ist eher eine Designfrage. Ich finde letzteres besser, so, finde ich, behält man die Übersicht. Das ganze hat aber nichts mit Initialisierung zu tun. Im ctor-Rumpf sind die Variablen bereits initialisiert. Sieh dir dazu mal <em>Initialisierungslisten im Konstruktor</em> an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891725</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Mon, 03 May 2010 12:50:49 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Variablen Initialisierung im Konstruktor on Mon, 03 May 2010 12:54:45 GMT]]></title><description><![CDATA[<p>Halte deine Header-Dateien nach Möglichkeit frei von Code, also reine<br />
Deklarationen, solange du keine Templates benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891726</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 May 2010 12:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Variablen Initialisierung im Konstruktor on Mon, 03 May 2010 13:01:26 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>eigentlich hat deine Frage gar nichts mit &quot;Initialisierung&quot; oder &quot;Zuweisung&quot; zu tun, sondern ist eine Frage der Codeorganisation - sie betrifft JEDE Klassenfunktion.<br />
Technisch sind beide Varianten (wenn ich nichts übersehen habe) identisch (Ausnahme: &quot;inline-Empfehlung&quot;).<br />
Es gibt nur sehr wenige &quot;zwingende&quot; Gründe für eine Defintion (!) innerhalb oder außerhalb der Klasse selbst: Templates brauchen Ersteres - ein bestimmtes &quot;Austauschbarkeitskonzept&quot; wird durch Zweiteres vereinfacht.<br />
Alles Andere ist IMHO Geschmackssache.</p>
<p>Ich persönlich entscheide mich im Großen und Ganzen:<br />
- kleine/&quot;organische&quot; Implementierungen oder solche mit &quot;dokumentierendem Charakter&quot; packe ich in die Klassendeklaration.<br />
- alles Andere &quot;raus&quot;.</p>
<p>Oder anders ausgedrückt: Eine Klassendeklaration soll einem Außenstehenden Betrachter möglichst verständlich sein - da wo &quot;Innendefinition&quot; diesem Ziel dient, nutze ich sie.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891727</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 03 May 2010 13:01:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Variablen Initialisierung im Konstruktor on Mon, 03 May 2010 13:05:38 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>[...]Technisch sind beide Varianten (wenn ich nichts übersehen habe) identisch (Ausnahme: &quot;inline-Empfehlung&quot;).[...]</p>
</blockquote>
<p>Das stimmt nur dann, wenn für die Version mit getrennter Deklaration und Definition die Definition in einer Übersetzungseinheit angesiedelt ist. Ist sie im Header definiert, verletzt dies (so wie der Code dort steht) die ODR und führt folglich zu einem Compilefehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891730</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 03 May 2010 13:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Variablen Initialisierung im Konstruktor on Mon, 03 May 2010 13:47:15 GMT]]></title><description><![CDATA[<p>speicher schrieb:</p>
<blockquote>
<p>Hallo ist es besser die Variablen Zuweisung in der Klasse zu schreiben oder außerhalb der Klasse ?</p>
</blockquote>
<p>Ich würde jegliche Methodendefinition in der Regel immer auslagern, und man trennt dies auch in den Dateien auf. In die Headerdateien gehören üblicherweise nur die Deklarationen, in der zugehörigen Sourcedatei in der Regel die Definitionen (Implementierung).</p>
<p>Zudem ist es beim Konstruktor ohnehin besser die Initialisierungsliste zu verwenden, innerhalb des Konstruktorrumpfes ist dies eine nachträgliche Zuweisung (Was bei komplexeren Objekten durchaus Unterschiede macht).</p>
<p>Besser:</p>
<pre><code class="language-cpp">// autos.h
#ifndef AUTOS_HEADER
#define AUTOS_HEADER

#include &lt;string&gt;

class autos
{
  private:
    int speed;
    std::string marke;

  public:
    //...
    autos(int speed, std::string const &amp; marke);
    //...
};
#endif
</code></pre>
<pre><code class="language-cpp">// autos.cpp
#include &quot;autos.h&quot;
#include &lt;iostream&gt;

using namespace std; // Nicht im Header verwenden

//...
autos::autos(int speed, std::string const &amp; marke)
:   speed(speed),
    marke(marke)
{
}
//...
</code></pre>
<pre><code class="language-cpp">// main.cpp
#include &quot;autos.h&quot;

int main()
{
  {
    autos aut(100, &quot;test&quot;);
    aut.wagen1();
  }

  system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1891766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891766</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 03 May 2010 13:47:15 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Variablen Initialisierung im Konstruktor on Mon, 03 May 2010 14:06:30 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>[...]Technisch sind beide Varianten (wenn ich nichts übersehen habe) identisch (Ausnahme: &quot;inline-Empfehlung&quot;).[...]</p>
</blockquote>
<p>Das stimmt nur dann, wenn für die Version mit getrennter Deklaration und Definition die Definition in einer Übersetzungseinheit angesiedelt ist. Ist sie im Header definiert, verletzt dies (so wie der Code dort steht) die ODR und führt folglich zu einem Compilefehler.</p>
</blockquote>
<p>Sorry - das habe ich nicht verstanden.<br />
<em>Was</em> gilt nur im von Dir genannten Fall? Dass beide Varianten &quot;technisch identisch&quot; (damit meinte ich die Eigenschaften des kompilierten Programms) sind?<br />
...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891780</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 03 May 2010 14:06:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Variablen Initialisierung im Konstruktor on Mon, 03 May 2010 14:13:50 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Sorry - das habe ich nicht verstanden.<br />
<em>Was</em> gilt nur im von Dir genannten Fall? Dass beide Varianten &quot;technisch identisch&quot; (damit meinte ich die Eigenschaften des kompilierten Programms) sind?<br />
...</p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p>Wenn Du den Code so wie oben geschrieben getrennt (Deklarationen in Header, Definitionen in cpp, komplett in cpp geht auch) ausführst, ist Deine Aussage richtig. Dann ist es, mal abgesehen von der inline Empfehlung, identisch zum direkt in der Klasse eingebetetten Code.<br />
Wenn Du den getrennten Code aber komplett in den Header packst dann verletzt Du die ODR, sobald Du den Header mehr als einmal inkludierst. Hier hilft nur die explizite <code>inline</code> -Spezifizierung jeder Methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891786</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 03 May 2010 14:13:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Variablen Initialisierung im Konstruktor on Mon, 03 May 2010 15:51:05 GMT]]></title><description><![CDATA[<p>OK - Du meintest also &quot;wenn man Fehler beim inlining macht, gibt's Linkerfehler&quot;.</p>
<p>Davon habe ich nicht sprechen wollen, sondern vom Laufzeitverhalten des resultieren Programms.<br />
Auch hatte ich nicht den Eindruck, als ob der gute &quot;speicher&quot; überhaupt an Headerfiles gedacht (oder davon gehört ? <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="😉"
    /> ) hat.<br />
Aber vielleicht habe ich mich da auch geirrt.</p>
<p>Auf jeden Fall ist es gut, wenn zu einem Thema verschiedene Leute jeweils neue Aspekte beitragen - so wie Du gerade.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891836</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 03 May 2010 15:51:05 GMT</pubDate></item></channel></rss>