<?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[Veerbung: Überschreiben von Konstruktoren - Verständnisproblem]]></title><description><![CDATA[<p>Tachauch,</p>
<p>bin grade dabei mir etwas C++ anzueignen und komme an der Stelle Vererbung - Überschreiben von Konstruktoren nicht weiter. Programmiere schon seit längerer Zeit mir objektorientieren Programmiersprachen - verstehe also den Hintergrund - jedoch weiß ich nicht wie weiter.<br />
Hier mal der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class Person {
    public:
        Person(string name, int age);
        void info() const;
    private:
        string name;
        int age;
};
Person::Person(string name, int age):
    name(name),
    age(age)
    {}
void Person::info() const {
    cout &lt;&lt; &quot;Name: &quot; &lt;&lt; name &lt;&lt; endl &lt;&lt; &quot;Alter: &quot; &lt;&lt; age &lt;&lt; endl;
}

class Pupil: public Person {
    public:
        Pupil(string name, int age, string _class);
        void info() const;
    private:
        string name;
        int age;
        string _class;
};
Pupil::Pupil(string name, int age, string _class):
    Person(name, age) {;}
    _class(_class)
    {}
void Pupil::info() const {
    cout &lt;&lt; &quot;Schüler &quot; &lt;&lt; name &lt;&lt; endl &lt;&lt; &quot;Alter: &quot; &lt;&lt; age &lt;&lt; endl
         &lt;&lt; &quot;Klasse: &quot; &lt;&lt; _class &lt;&lt; endl;
}

int main() {
    Person ich(&quot;Blah&quot;, 900);
    ich.info();
    Pupil ichs(&quot;Blah&quot;, 900, &quot;50c&quot;);
    ichs.info();
}
</code></pre>
<p>G++ wirft mir folgendes:</p>
<blockquote>
<p>helloworld.cpp:33: Fehler: expected constructor, destructor, or type conversion before »(« token</p>
</blockquote>
<p>Ich will mit `Pupil::Pupil` eigentlich nur den Konstruktor `Person::Person` überschreiben...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235922/veerbung-überschreiben-von-konstruktoren-verständnisproblem</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 03:40:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235922.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 08 Mar 2009 14:58:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 14:58:07 GMT]]></title><description><![CDATA[<p>Tachauch,</p>
<p>bin grade dabei mir etwas C++ anzueignen und komme an der Stelle Vererbung - Überschreiben von Konstruktoren nicht weiter. Programmiere schon seit längerer Zeit mir objektorientieren Programmiersprachen - verstehe also den Hintergrund - jedoch weiß ich nicht wie weiter.<br />
Hier mal der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class Person {
    public:
        Person(string name, int age);
        void info() const;
    private:
        string name;
        int age;
};
Person::Person(string name, int age):
    name(name),
    age(age)
    {}
void Person::info() const {
    cout &lt;&lt; &quot;Name: &quot; &lt;&lt; name &lt;&lt; endl &lt;&lt; &quot;Alter: &quot; &lt;&lt; age &lt;&lt; endl;
}

class Pupil: public Person {
    public:
        Pupil(string name, int age, string _class);
        void info() const;
    private:
        string name;
        int age;
        string _class;
};
Pupil::Pupil(string name, int age, string _class):
    Person(name, age) {;}
    _class(_class)
    {}
void Pupil::info() const {
    cout &lt;&lt; &quot;Schüler &quot; &lt;&lt; name &lt;&lt; endl &lt;&lt; &quot;Alter: &quot; &lt;&lt; age &lt;&lt; endl
         &lt;&lt; &quot;Klasse: &quot; &lt;&lt; _class &lt;&lt; endl;
}

int main() {
    Person ich(&quot;Blah&quot;, 900);
    ich.info();
    Pupil ichs(&quot;Blah&quot;, 900, &quot;50c&quot;);
    ichs.info();
}
</code></pre>
<p>G++ wirft mir folgendes:</p>
<blockquote>
<p>helloworld.cpp:33: Fehler: expected constructor, destructor, or type conversion before »(« token</p>
</blockquote>
<p>Ich will mit `Pupil::Pupil` eigentlich nur den Konstruktor `Person::Person` überschreiben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676156</guid><dc:creator><![CDATA[dauerbaustelle]]></dc:creator><pubDate>Sun, 08 Mar 2009 14:58:07 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 14:59:23 GMT]]></title><description><![CDATA[<p>Fast richtig <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="🙂"
    /></p>
<pre><code class="language-cpp">Pupil::Pupil(string name, int age, string _class):
    Person(name, age),
    _class(_class)
    {}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1676160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676160</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 08 Mar 2009 14:59:23 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 15:00:13 GMT]]></title><description><![CDATA[<p>Du hast mitten in der Initialisierungsliste ein <code>{;}</code> . Member werden dort aber durch ein Komma getrennt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676161</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 08 Mar 2009 15:00:13 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 15:18:28 GMT]]></title><description><![CDATA[<p>Herzlichen Dank <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676174</guid><dc:creator><![CDATA[dauerbaustelle]]></dc:creator><pubDate>Sun, 08 Mar 2009 15:18:28 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 15:27:11 GMT]]></title><description><![CDATA[<p>Noch was als Anmerkung: Ich würde Parameter von Memberfunktionen nicht gleich wie Membervariablen benennen. Zudem sollte man Klassentypen wie <code>std::string</code> grundsätzlich als Const-Referenz anstatt als Kopie übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676180</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 08 Mar 2009 15:27:11 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 15:36:46 GMT]]></title><description><![CDATA[<p>Das hier sieht auch gefährlich aus.</p>
<pre><code class="language-cpp">_class(_class)
</code></pre>
<p>Also der Unterstrich am Anfang des Bezeichners. Der könnte bereits von der Implementierung besetzt sein. (Was bei class nicht einmal unwahrscheinlich ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676188</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 08 Mar 2009 15:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 15:47:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Person {
    public:
        Person(string name, int age);
        void info() const;
std::string GetName() const {return name;}
    private:
        string name;
        int age;
};

class Pupil: public Person {
    public:
        Pupil(string name, int age, string _class);
        void info() const;
std::string GetName2() const {return name;}
    private:
        string name; //hast du scho
        int age; //hast du schon
        string _class;
};
</code></pre>
<pre><code class="language-cpp">int main()
{
 Pupil *ppl = new Pupil(&quot;Horst&quot;, 16, 4); // ^^
 std::cout &lt;&lt; ppl-&gt;GetName() &lt;&lt; &quot; != &quot; &lt;&lt; ppl-&gt;GetName2() &lt;&lt; std::endl;
 delete ppl;
 system (&quot;pause&quot;); //siehe consolen faq, warum man das eigtl nich macht, sondern anders - und wie ^^
}
</code></pre>
<p>Wie du siehst, hab ich mal 2 Fkt geschrieben und dir nen kleines Beispiel gepostet - sollte eigtl rel. schnell klar werden, was ich dir damit sagen möchte ^^</p>
<p>bb</p>
<p>edit:</p>
<p>drakon schrieb:</p>
<blockquote>
<p>Das hier sieht auch gefährlich aus.</p>
<pre><code class="language-cpp">_class(_class)
</code></pre>
<p>Also der Unterstrich am Anfang des Bezeichners. Der könnte bereits von der Implementierung besetzt sein. (Was bei class nicht einmal unwahrscheinlich ist).</p>
</blockquote>
<p>glaub ich nicht dran...<br />
imho ist nur folgendes reserviert:</p>
<pre><code class="language-cpp">__x //2 unterstriche - egal, was folgt
_A // 1 unterstrich und ein großbuchstabe
</code></pre>
<p>aber ich hätte den member so und so class genannt - wieso dort nen unterstrich davor und bei dem rest aber nicht? Oo<br />
ich regel das eigtl immer so, dass variablenamen klein sind und übergebene namen (wie bei ctor oder settern) kann ich dann einfach mit Unterstrich (_varname und dann varname = _varname) schreiben...</p>
<p>2.edit: delete hinzugefügt ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676194</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 08 Mar 2009 15:47:33 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 16:06:49 GMT]]></title><description><![CDATA[<p>17.4.3.1.2 schrieb:</p>
<blockquote>
<p>— Each name that begins with an underscore is reserved to the implementation for use as a name in the<br />
global namespace.165)</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1676208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676208</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 08 Mar 2009 16:06:49 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 16:11:14 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>17.4.3.1.2 schrieb:</p>
<blockquote>
<p>— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.165)</p>
</blockquote>
</blockquote>
<p>&quot;For use as a name&quot;: Heißt das nicht, dass bei einer Namensauflösung dem lokalen Bezeichner Vorrang gewährt würde und die Regel hier deshalb gar nicht in's Gewicht fällt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676212</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 08 Mar 2009 16:11:14 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 16:19:00 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Zudem sollte man Klassentypen wie <code>std::string</code> grundsätzlich als Const-Referenz anstatt als Kopie übergeben.</p>
</blockquote>
<p>Öh... das verstehe ich (noch) nicht. Code wäre nett <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>unskilled schrieb:</p>
<blockquote>
<p>aber ich hätte den member so und so class genannt - wieso dort nen unterstrich davor und bei dem rest aber nicht? Oo</p>
</blockquote>
<p>Möglicherweise, weil `class` ein reserviertes Keyword ist?!</p>
<p>@_unterstrichschreibweise: Werd dann halt class_ nehmen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676216</guid><dc:creator><![CDATA[dauerbaustelle]]></dc:creator><pubDate>Sun, 08 Mar 2009 16:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 16:24:33 GMT]]></title><description><![CDATA[<p>Mir fällt gerade auf: Vergiss den Satz von wegen: lass den unterstrich vor class beim member weg - wie verplant kann man eigtl sein -.-'<br />
Auch, wenn es nicht schlimm ist, die übergebene variable gleich zu benennen, wie nen member - ich mags nicht - muss man eben hinten noch nen unterstrich machen...</p>
<p>Naja - b2t:<br />
Das spielt aber keine Rolle!?</p>
<pre><code class="language-cpp">int _class = 123; //

class abc
{
int _class;
public:
 abc (int _class_) : _class (_class_) {}
};
</code></pre>
<p>Egal, ob da iwas im globalen Namespace ist - lediglich Makros werden doof:</p>
<p>16.8.4 schrieb:</p>
<blockquote>
<p>Any other predefined macro names shall begin with a leading underscore followed by an uppercase letter or a second underscore.</p>
</blockquote>
<p>17.6.4.3.3 schrieb:</p>
<blockquote>
<p>Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.</p>
</blockquote>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676222</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 08 Mar 2009 16:24:33 GMT</pubDate></item><item><title><![CDATA[Reply to Veerbung: Überschreiben von Konstruktoren - Verständnisproblem on Sun, 08 Mar 2009 17:07:58 GMT]]></title><description><![CDATA[<p>Wenn schon, dann nimm <code>Class</code> oder ein ausführlicherer Bezeichner, Unterstriche am Anfang sind nicht nötig.</p>
<p>Eine Const-Referenz-Übergabe sieht so aus:</p>
<pre><code class="language-cpp">Pupil(const string&amp; Name, int Age, const string&amp; Class);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1676252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676252</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 08 Mar 2009 17:07:58 GMT</pubDate></item></channel></rss>