<?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[Verkettete Liste]]></title><description><![CDATA[<p>Hab mir aus folgendem Thread, mal den Code hier genommen, um mir eine &quot;verkettete Liste&quot; zu verdeutlichen: <a href="http://c-plusplus.net/forum/viewtopic-var-p-is-1324660.html#1324660" rel="nofollow">http://c-plusplus.net/forum/viewtopic-var-p-is-1324660.html#1324660</a></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class SList //1.
{
public:
    typedef int value_type;

private:
    class Node  // Listenelement 2.
    {
    public:
        explicit Node( const value_type&amp; x, Node* next = 0 )
                :m_next( next ), m_value( x )
        {

        }
        Node* m_next;
        value_type m_value;
    };

public:
    SList()     // ersetzt das init()
        : m_kopf( value_type() )
        , m_ende( &amp;m_kopf )
    {}
    ~SList() { clear(); } // immer schön wieder aufräumen

    void push_back( const value_type&amp; x ) // ersetzt das einfuegen() was ein anhaengen() ist
    {
        m_ende-&gt;m_next = new Node( x );
        m_ende = m_ende-&gt;m_next;
    }

    void clear() // ersetzt das ende()
    {
        for( Node* p = m_kopf.m_next; p; )
        {
            Node* tmp = p;
            p = p-&gt;m_next;
            delete tmp;
        }
        m_kopf.m_next = 0;
        m_ende = &amp;m_kopf;
    }

    // --   Ausgabe
    std::ostream&amp; ausgeben( std::ostream&amp; out, const char* delim = &quot;&quot; )
    {
        for( Node* p = m_kopf.m_next; p; p = p-&gt;m_next )
        {
            out &lt;&lt; p-&gt;m_value &lt;&lt; delim;
        }
        return out;
    }

private:
    // Kopieren z.Zt. nicht vorgesehen; -&gt; &quot;Regel der drei&quot;
    SList( const SList&amp; );
    SList&amp; operator=( const SList&amp; );

    // --   Member
    Node m_kopf;
    Node* m_ende;
};

int main()
{

    return 0;
}
</code></pre>
<p>Also auf den ersten Blick versteh ich noch nicht so viel, und hab auch gleich mal 2 Fragen:<br />
1. Woher kommt die Funktion &quot;value_type()&quot; Z.24? Das ist doch nur der Name vom typedef?<br />
2. Was genau ist die &quot;Regel der 3&quot;?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196629/verkettete-liste</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 15:00:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196629.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 31 Oct 2007 21:54:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verkettete Liste on Wed, 31 Oct 2007 21:54:56 GMT]]></title><description><![CDATA[<p>Hab mir aus folgendem Thread, mal den Code hier genommen, um mir eine &quot;verkettete Liste&quot; zu verdeutlichen: <a href="http://c-plusplus.net/forum/viewtopic-var-p-is-1324660.html#1324660" rel="nofollow">http://c-plusplus.net/forum/viewtopic-var-p-is-1324660.html#1324660</a></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class SList //1.
{
public:
    typedef int value_type;

private:
    class Node  // Listenelement 2.
    {
    public:
        explicit Node( const value_type&amp; x, Node* next = 0 )
                :m_next( next ), m_value( x )
        {

        }
        Node* m_next;
        value_type m_value;
    };

public:
    SList()     // ersetzt das init()
        : m_kopf( value_type() )
        , m_ende( &amp;m_kopf )
    {}
    ~SList() { clear(); } // immer schön wieder aufräumen

    void push_back( const value_type&amp; x ) // ersetzt das einfuegen() was ein anhaengen() ist
    {
        m_ende-&gt;m_next = new Node( x );
        m_ende = m_ende-&gt;m_next;
    }

    void clear() // ersetzt das ende()
    {
        for( Node* p = m_kopf.m_next; p; )
        {
            Node* tmp = p;
            p = p-&gt;m_next;
            delete tmp;
        }
        m_kopf.m_next = 0;
        m_ende = &amp;m_kopf;
    }

    // --   Ausgabe
    std::ostream&amp; ausgeben( std::ostream&amp; out, const char* delim = &quot;&quot; )
    {
        for( Node* p = m_kopf.m_next; p; p = p-&gt;m_next )
        {
            out &lt;&lt; p-&gt;m_value &lt;&lt; delim;
        }
        return out;
    }

private:
    // Kopieren z.Zt. nicht vorgesehen; -&gt; &quot;Regel der drei&quot;
    SList( const SList&amp; );
    SList&amp; operator=( const SList&amp; );

    // --   Member
    Node m_kopf;
    Node* m_ende;
};

int main()
{

    return 0;
}
</code></pre>
<p>Also auf den ersten Blick versteh ich noch nicht so viel, und hab auch gleich mal 2 Fragen:<br />
1. Woher kommt die Funktion &quot;value_type()&quot; Z.24? Das ist doch nur der Name vom typedef?<br />
2. Was genau ist die &quot;Regel der 3&quot;?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395640</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 31 Oct 2007 21:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to Verkettete Liste on Thu, 01 Nov 2007 09:52:52 GMT]]></title><description><![CDATA[<p>Weiß keiner was? Oder is es vll. nur so weit runtergerutscht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395760</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Thu, 01 Nov 2007 09:52:52 GMT</pubDate></item><item><title><![CDATA[Reply to Verkettete Liste on Thu, 01 Nov 2007 10:07:53 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Also auf den ersten Blick versteh ich noch nicht so viel, und hab auch gleich mal 2 Fragen:<br />
1. Woher kommt die Funktion &quot;value_type()&quot; Z.24? Das ist doch nur der Name vom typedef?</p>
</blockquote>
<p>Das ist keine Funktion sondern das Erzwingen der Standardinitialisierung (Bei einem Integer wäre das 0 bei einem Objekt der Standardkonstruktor...)-</p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>2. Was genau ist die &quot;Regel der 3&quot;?</p>
</blockquote>
<p><a href="http://tutorial.schornboeck.net/bigthree.htm" rel="nofollow">http://tutorial.schornboeck.net/bigthree.htm</a></p>
<p>Davon abgesehen kannst du auch ein bischen Gedult üben <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="😉"
    /> Zum einen ist heute in katholischen Bundesländern ein Urlaubstag, zum anderen ist es ja noch nicht wirklich alt...</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395766</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 01 Nov 2007 10:07:53 GMT</pubDate></item><item><title><![CDATA[Reply to Verkettete Liste on Thu, 01 Nov 2007 10:48:28 GMT]]></title><description><![CDATA[<p>Ja, ja ich weiß, tut mir leid, mir hängen die Feiertage schon zum Hals raus, leb in der Stadt mit den meisten Feiertagen in Deutschland (wer Ahnung hat weiß es^^). Bins halt nich gewöhnt dass nach 12Std noch keiner zurückgeschrieben hat.</p>
<p>Bei folgendem Code hier:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class test
{
    public:
    test(int a_);
    ~test();

    private:
    int m_a;
};

test::test(int a_)
:m_a(a_)
{

}

test::~test()
{

}

typedef int value;
typedef test object;

int main()
{
    value a=value();
    test A(object());

    return 0;
}
</code></pre>
<p>ist a=0 und &quot;test A(0)&quot;? Also das &quot;m_a&quot; dann 0 ist? Oder wie ist das nochmal bei Objekten, da hast du gemeint da kommt der Standardkonstruktor hin, aber wie ist das genau gemeint?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395791</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Thu, 01 Nov 2007 10:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Verkettete Liste on Thu, 01 Nov 2007 12:39:35 GMT]]></title><description><![CDATA[<p>Dann gewöhn Dich dran, Du bist nicht der einzige.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395842</guid><dc:creator><![CDATA[Mille]]></dc:creator><pubDate>Thu, 01 Nov 2007 12:39:35 GMT</pubDate></item><item><title><![CDATA[Reply to Verkettete Liste on Thu, 01 Nov 2007 13:18:29 GMT]]></title><description><![CDATA[<p>Das sollte gar nicht kompilieren, da test (alias object) keinen Standardkonstruktor hat.<br />
Wenn du einen Konstruktor selbst anlegst, erzeugt dir der Compiler keinen Defaulkonstruktor mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395859</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 01 Nov 2007 13:18:29 GMT</pubDate></item><item><title><![CDATA[Reply to Verkettete Liste on Thu, 01 Nov 2007 13:25:21 GMT]]></title><description><![CDATA[<p>aalso:<br />
erstens:</p>
<pre><code class="language-cpp">int main()
{
    value a=value();
</code></pre>
<p>da value = int ist, steht hier im Endeffekt</p>
<pre><code class="language-cpp">int a = int();
</code></pre>
<p>was soviel bedeutet, dass a defaultinitialisiert wird, was bei ints einer 0 entspricht.</p>
<p>zweitens:</p>
<pre><code class="language-cpp">test A(object());
</code></pre>
<p>ist das gleiche wie</p>
<pre><code class="language-cpp">test A(test());
</code></pre>
<p>hier machst du also folgendes: du uebergibst dem Konstruktor von A ein temporaeres Objekt vom Typ test. Dieses temporaere Objekt erzeugst du per deafault-Konstruktor. (test() erzeugt dieses temporaere Objekt oder versucht das zumindest).</p>
<p>Der Compiler sollte dir eigentlich diese letzte Zeile um die Ohren schmeissen, denn da du einen Ctor(int) definiert hast, gibts den Default-Ctor nichtmehr (Den copy-Ctor schon, der wird implizit generiert).</p>
<p>Was hingegen funktionieren wuerde ist folgendes:</p>
<pre><code class="language-cpp">test A(value());  // ist gleich test A(int());
</code></pre>
<p>hier bekommt der Konstruktor von A ein temporaeres int uebergeben, das default-initialisiert wurde (also 0), weshalb danach A.m_a == 0</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1395861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1395861</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 01 Nov 2007 13:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to Verkettete Liste on Thu, 01 Nov 2007 22:17:10 GMT]]></title><description><![CDATA[<p>Das hier funktioniert bei mir aber ohne Fehlermeldung:</p>
<pre><code class="language-cpp">test A(object());
</code></pre>
<p>!?</p>
<p>Ist der Wert bei einer defaulinitialisierung immer gleich &quot;0&quot;? Oder was ist bei<br />
unsigned int(), unsigned long(), long(), char(), string(), float(), double()........?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1396138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1396138</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Thu, 01 Nov 2007 22:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to Verkettete Liste on Thu, 01 Nov 2007 23:08:53 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Das hier funktioniert bei mir aber ohne Fehlermeldung:</p>
<pre><code class="language-cpp">test A(object());
</code></pre>
<p>!?</p>
<p>Ist der Wert bei einer defaulinitialisierung immer gleich &quot;0&quot;? Oder was ist bei<br />
unsigned int(), unsigned long(), long(), char(), string(), float(), double()........?</p>
</blockquote>
<p>Hallo Stromberg,</p>
<p>Falls 'object' ein 'eingebauter' Typ - also char über int bis double - ist, so ist der Wert immer 0. Bei string wird der Defaultkonstruktor aufgerufen und Du erhälst einen leeren String.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1396156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1396156</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 01 Nov 2007 23:08:53 GMT</pubDate></item><item><title><![CDATA[Reply to Verkettete Liste on Fri, 02 Nov 2007 09:10:33 GMT]]></title><description><![CDATA[<p>test A(object()); macht nicht das was du denkst. Hier wird nicht etwa eine Instanz namens A vom Typ test konstruiert sondern eine Funktion A, die ein test zurückgibt und einen Funktionspointer auf ein weitere derartige Funktion als Parameter erwartet.<br />
Deswegen geht das. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
mach einfach mal folgendes</p>
<pre><code class="language-cpp">test B(2);
    test A(object());
    B = A;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1396248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1396248</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 02 Nov 2007 09:10:33 GMT</pubDate></item></channel></rss>