<?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[nicht den Default Konstruktor der Basisklasse benutzen]]></title><description><![CDATA[<p>ich hab eine klasse, deren default konstruktor private ist, denn der soll nicht benutzt werden. Es gibt einen, der einen param nimmt:</p>
<pre><code class="language-cpp">class A
{
    public:
        A(int a);
    private:
        A();
}
</code></pre>
<p>Jetzt habe ich in der abgeleiteten Klasse einen Konstruktor, der ja, wenn man nichts dranschreibt, den defulat konstruktor aufruft, der private ist. Sie weiß aber nicht beim aufruf, welche parameter übergeben werden müssen:</p>
<pre><code class="language-cpp">class B : public A
{
    public:
        B();
}

B::B()
//  :A(12) so normalerweise, aber der konstruktor weiß noch nicht, was er übergeben soll
{
    int i;
    // rechne iwie i aus
    A(i);
}
</code></pre>
<p>Das geht logischerweise nicht, denn implizit wird vorher A() aufgerufen, was aber ja private ist. Wie mach ich das?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191301/nicht-den-default-konstruktor-der-basisklasse-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 22:43:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191301.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Sep 2007 12:43:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 12:43:25 GMT]]></title><description><![CDATA[<p>ich hab eine klasse, deren default konstruktor private ist, denn der soll nicht benutzt werden. Es gibt einen, der einen param nimmt:</p>
<pre><code class="language-cpp">class A
{
    public:
        A(int a);
    private:
        A();
}
</code></pre>
<p>Jetzt habe ich in der abgeleiteten Klasse einen Konstruktor, der ja, wenn man nichts dranschreibt, den defulat konstruktor aufruft, der private ist. Sie weiß aber nicht beim aufruf, welche parameter übergeben werden müssen:</p>
<pre><code class="language-cpp">class B : public A
{
    public:
        B();
}

B::B()
//  :A(12) so normalerweise, aber der konstruktor weiß noch nicht, was er übergeben soll
{
    int i;
    // rechne iwie i aus
    A(i);
}
</code></pre>
<p>Das geht logischerweise nicht, denn implizit wird vorher A() aufgerufen, was aber ja private ist. Wie mach ich das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356764</guid><dc:creator><![CDATA[piXelshooter]]></dc:creator><pubDate>Sat, 01 Sep 2007 12:43:25 GMT</pubDate></item><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 13:27:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int berechne_i()
{
    int i;
    // berechne i...
    return i;
}

B::B()
:    A( berechne_i() )
{ }
</code></pre>
<p>Mit ner Funktion geht das. Die Funktion könntest du auch innerhalb der Klasse definieren. Dann muss sie aber static sein.</p>
<p>EDIT: Klammern beim Funktionsaufruf von berechne_i vergessen.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356775</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 01 Sep 2007 13:27:12 GMT</pubDate></item><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 13:02:42 GMT]]></title><description><![CDATA[<p>Nen Ctor, der nen Funktionszeiger bekommt? ...<br />
Wieso nicht einfach ne init() Methode?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356777</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sat, 01 Sep 2007 13:02:42 GMT</pubDate></item><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 13:03:06 GMT]]></title><description><![CDATA[<p>Was du suchst ist &quot;protected&quot;.</p>
<pre><code class="language-cpp">class Base
{
    public:
        Base(int a, int b) : m_a(a), m_b(b) {}

    protected:
        Base() : m_a(0), m_b(0) {}

    private:
        int m_a;
        int m_b;
};

class Derived : public Base
{
    public:
        Derived() : Base() {}
};

int main()
{
    Base b(1, 2);
    Derived d();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1356779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356779</guid><dc:creator><![CDATA[OhneName]]></dc:creator><pubDate>Sat, 01 Sep 2007 13:03:06 GMT</pubDate></item><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 13:10:36 GMT]]></title><description><![CDATA[<p>ok thx zwar nit so dolle aber was will man machen...danke<br />
@ ohnename hmm... so meinte ich das eig nich.. ich glaub Don06' Variante gefällt mir am besten.</p>
<p>noch eine frage:<br />
kann ein konstruktor einer klasse einen anderen der selben klasse aufrufen oder muss man dafür so eine art init() methode schreiben`?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356782</guid><dc:creator><![CDATA[piXelshooter]]></dc:creator><pubDate>Sat, 01 Sep 2007 13:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 13:26:38 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Nen Ctor, der nen Funktionszeiger bekommt? ...<br />
Wieso nicht einfach ne init() Methode?</p>
</blockquote>
<p>lol... da hab ich glatt die Klammern vergessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356794</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 01 Sep 2007 13:26:38 GMT</pubDate></item><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 13:26:58 GMT]]></title><description><![CDATA[<p>piXelshooter schrieb:</p>
<blockquote>
<p>noch eine frage:<br />
kann ein konstruktor einer klasse einen anderen der selben klasse aufrufen oder muss man dafür so eine art init() methode schreiben`?</p>
</blockquote>
<p>Ich glaube das geht nicht (was mich auch ziemlich stört an C++ und ich absolut nicht nachvollziehen kann). Du musst dir wohl oder übel ne private init() Methode schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356795</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sat, 01 Sep 2007 13:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 13:28:15 GMT]]></title><description><![CDATA[<p>Don06 schrieb:</p>
<blockquote>
<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Nen Ctor, der nen Funktionszeiger bekommt? ...<br />
Wieso nicht einfach ne init() Methode?</p>
</blockquote>
<p>lol... da hab ich glatt die Klammern vergessen.</p>
</blockquote>
<p>Oh, dann meinen wir letztlich ja das selbe. Das mit dem Funktionszeiger hätte ich schon arg grausig gefunden^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356796</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sat, 01 Sep 2007 13:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 13:37:57 GMT]]></title><description><![CDATA[<p>Ja, hatte gerade noch was in Lazarus (Pascal) gemacht. Da ruft man ne Funktion ohne Parameter so auf, aber naja.</p>
<p>Constructor delegation kommt im neuen C++ - Standard. Zumindest sagt das <a href="http://en.wikipedia.org/wiki/C++0x#Constructor_delegation" rel="nofollow">Wikipedia</a>.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356802</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 01 Sep 2007 13:37:57 GMT</pubDate></item><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 18:18:56 GMT]]></title><description><![CDATA[<p>piXelshooter schrieb:</p>
<blockquote>
<p>ich hab eine klasse, deren default konstruktor private ist, denn der soll nicht benutzt werden.</p>
</blockquote>
<p>Wenn er nicht benutzt werden soll, dann deklariere ihn erst gar nicht.<br />
Sobald du nämlich einen Konstruktor mit Parametern deklarierst, generiert der Compiler keinen Default-Konstruktor mehr für dich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356856</guid><dc:creator><![CDATA[TomasRiker]]></dc:creator><pubDate>Sat, 01 Sep 2007 18:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to nicht den Default Konstruktor der Basisklasse benutzen on Sat, 01 Sep 2007 15:49:46 GMT]]></title><description><![CDATA[<p>cool, wusst ich net, hab das schon so oft gesehn, dachte, das muss <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356864</guid><dc:creator><![CDATA[piXelshooter]]></dc:creator><pubDate>Sat, 01 Sep 2007 15:49:46 GMT</pubDate></item></channel></rss>