<?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[(abstrakte) Basisklasse mit Konstruktor?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich wundere mich gerade warum es nicht geht bei einer basisklasse einen konstruktor zu setzen in dem ich member habe.</p>
<p>Ich möchte folgendes schaffen</p>
<pre><code class="language-cpp">class Base
{
     public:
          Base(int a) {m_a = a;}
          int m_a;
};

class D1 : public Base
{
     public:
          //ausgabe von a aus base?
          void foo() { std::cout &lt;&lt; a &lt;&lt; std::endl; }
};
</code></pre>
<pre><code class="language-cpp">//in der main:
Base* base;
base = new Base(4);

if (a == 0) base = new D1();
else base = new D2();

base-&gt;foo();

delete base;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/257639/abstrakte-basisklasse-mit-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 21:46:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257639.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 Dec 2009 14:09:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Thu, 31 Dec 2009 14:09:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich wundere mich gerade warum es nicht geht bei einer basisklasse einen konstruktor zu setzen in dem ich member habe.</p>
<p>Ich möchte folgendes schaffen</p>
<pre><code class="language-cpp">class Base
{
     public:
          Base(int a) {m_a = a;}
          int m_a;
};

class D1 : public Base
{
     public:
          //ausgabe von a aus base?
          void foo() { std::cout &lt;&lt; a &lt;&lt; std::endl; }
};
</code></pre>
<pre><code class="language-cpp">//in der main:
Base* base;
base = new Base(4);

if (a == 0) base = new D1();
else base = new D2();

base-&gt;foo();

delete base;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1830316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1830316</guid><dc:creator><![CDATA[Testo]]></dc:creator><pubDate>Thu, 31 Dec 2009 14:09:26 GMT</pubDate></item><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Thu, 31 Dec 2009 14:25:31 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void foo() { std::cout &lt;&lt; m_a &lt;&lt; std::endl; }
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1830321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1830321</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 31 Dec 2009 14:25:31 GMT</pubDate></item><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Thu, 31 Dec 2009 14:27:18 GMT]]></title><description><![CDATA[<p>Was ist D2? Was ist a bei if(a == 0)? Warum wirfst du dein Base-Objekt weg, bei dem du m_a auf 4 gesetzt hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1830323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1830323</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 31 Dec 2009 14:27:18 GMT</pubDate></item><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Sat, 02 Jan 2010 00:40:56 GMT]]></title><description><![CDATA[<p>die main ist ja auch iwie komplett falsch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<pre><code class="language-cpp">//in der main: 
Base* base; 
base = new Base(4); //das hier wird nie wieder gelöscht - und völlig zu unrecht konstruiert

if (a == 0) base = new D1();
else base = new D2(); 

base-&gt;foo(); 

delete base;
</code></pre>
<p>so heir wär es richtig:</p>
<pre><code class="language-cpp">Base* bar = new D1(4);
bar-&gt;foo();
delete bar;
</code></pre>
<p>kommen wir zu D1:</p>
<pre><code class="language-cpp">class D1 : public Base
{
public:
  D1(int a)
  : Base(a)
  {}

  void foo()
  { //wurde ja schon gesagt, dass hier m_a stehen sollte ;o)
    std::cout &lt;&lt; m_a &lt;&lt; std::endl;
  }
};
</code></pre>
<p>das hinter dem Doppelpkt. im Konstruktor nennt sich Initialisierungsliste, und die solltest du auch bei Base schon nutzen:</p>
<pre><code class="language-cpp">Base::Base(int a)
: m_a(a)
{}
</code></pre>
<p>Evtl. willst du auch ein Basis-Objekt übergeben? So sieht dein Code zumindest aus, dann:</p>
<pre><code class="language-cpp">struct base
{
  base(int a)
  : a(a)
  {}

private:
  int a;
};

struct derived : base
{
  derived(const base&amp; b)
  : base(b)
  {}

  void print()
  {
    std::cout &lt;&lt; a &lt;&lt; std::endl;
  }
};

int main()
{
  base b(4);
  base* d = new derived(b);

  d-&gt;print();

  delete d;
}
</code></pre>
<p>alles klar? : &gt;</p>
<p>bb</p>
<p>PS: Lass dich von den struct nicht verwirren, das erspart mir nur die ganzen <code>public</code> s, die ich bei der Verwendung von <code>class</code> hätte mitschreiben müssen ;o)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1830334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1830334</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 02 Jan 2010 00:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Mon, 04 Jan 2010 13:06:09 GMT]]></title><description><![CDATA[<p>hmm....danke erstmal für die Antwort.</p>
<p>Also was ihc machen will ist: Ich möchte auf den member in der basis-klasse zugreifen UND aber dann auch in den abgeleiteten. Also so in etwa:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class base
{
public:
  base(int a)
  : ba(a)
  {}

 virtual void bar() = 0;

  void foo() {
       // mach was mit ba in der basisklasse
       std::cout &lt;&lt; ba &lt;&lt; std::endl;
       bar();
  }

  int ba;
};

class derived : base
{
public:

  void bar()
  {
    // Hier auch auf den member von base zugreifen
    std::cout &lt;&lt; ba &lt;&lt; std::endl;
  }
};

int main()
{
  base b(4);
  base* d = new derived(b);

  d-&gt;print();

  delete d;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1832120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832120</guid><dc:creator><![CDATA[Testo]]></dc:creator><pubDate>Mon, 04 Jan 2010 13:06:09 GMT</pubDate></item><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Mon, 04 Jan 2010 13:20:56 GMT]]></title><description><![CDATA[<p>Ok. Also folgender code funktioniert. Mir ist aber nicht klar warum....</p>
<p>kann mri jemand helfen?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class base
{
public:
   base(int a) : base_a(a) {}

  virtual void print() = 0;

  int base_a;
};

class derived : public base
{
public:
   derived(int a) : base(a) {}

  void print()
  {
    std::cout &lt;&lt; base_a &lt;&lt; std::endl;
  }
};

int main()
{
  base* d = new derived(4);

  d-&gt;print();

  delete d;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1832131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832131</guid><dc:creator><![CDATA[Testo]]></dc:creator><pubDate>Mon, 04 Jan 2010 13:20:56 GMT</pubDate></item><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Mon, 04 Jan 2010 14:11:45 GMT]]></title><description><![CDATA[<p>Und warum geht folgendes nicht ? Ich würde gerne eine OBjekt Ctest mit einem übergebenen parameter initialisieren:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Pattern
{
    public:
            Pattern(int a) { memb = a;}

    int memb;
};
class Ctest
{
        public:
                Ctest(Pattern* P) : PC(P) { }     

                Pattern* PC;
};
class base
{
public:
   base(Pattern* P) : P_a(P) {CT = Ctest(P);}

  virtual void print() = 0;
   void foo() { std::cout&lt;&lt; &quot;base: &quot; &lt;&lt; P_a-&gt;memb &lt;&lt; std::endl;
       print();
   }

  Pattern* P_a;
  Ctest CT;
};

class derived : public base
{
public:
   derived(Pattern* P_) : base(P_) {}

  void print()
  {
    std::cout &lt;&lt; P_a-&gt;memb &lt;&lt; std::endl;
  }
};

int main()
{
  Pattern * P = new Pattern(3);
  base* d = new derived(P);

  d-&gt;foo();
  //d-&gt;print();

  delete d;
}
</code></pre>
<p>Compilermeldung:</p>
<pre><code>main.cpp:21: Fehler: keine passende Funktion für Aufruf von »Ctest::Ctest()«
main.cpp:14: Anmerkung: Kandidaten sind: Ctest::Ctest(Pattern*)
main.cpp:12: Anmerkung:                  Ctest::Ctest(const Ctest&amp;)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1832163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832163</guid><dc:creator><![CDATA[Testo]]></dc:creator><pubDate>Mon, 04 Jan 2010 14:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Mon, 04 Jan 2010 14:18:56 GMT]]></title><description><![CDATA[<p>Weil CT nicht in der Initialisierungsliste vom base-Ctor steht, sondern erst im CTor selbst einen Wert bekommt, wird versucht ein Ctest-Objekt mit dem Standard-Ctor zu erzeugen.<br />
Den gibt es aber nicht, da du ja selber einen Ctor mit Parameter angegeben hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832169</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 04 Jan 2010 14:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Mon, 04 Jan 2010 14:30:43 GMT]]></title><description><![CDATA[<p>danke aber wie löse ich dieses Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832175</guid><dc:creator><![CDATA[Testo]]></dc:creator><pubDate>Mon, 04 Jan 2010 14:30:43 GMT</pubDate></item><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Mon, 04 Jan 2010 14:33:08 GMT]]></title><description><![CDATA[<p>achso also:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Pattern
{
    public:
            Pattern(int a) { memb = a;}

    int memb;
};
class Ctest
{
        public:
                Ctest(Pattern* P) : PC(P) { }     

                Pattern* PC;
};
class base
{
public:
   base(Pattern* P) : P_a(P), CT(P) {}

  virtual void print() = 0;
   void foo() { std::cout&lt;&lt; &quot;base: &quot; &lt;&lt; P_a-&gt;memb &lt;&lt; std::endl;
       print();
   }

  Pattern* P_a;
  Ctest CT;
};

class derived : public base
{
public:
   derived(Pattern* P_) : base(P_) {}

  void print()
  {
    std::cout &lt;&lt; P_a-&gt;memb &lt;&lt; std::endl;
  }
};

int main()
{
  Pattern * P = new Pattern(3);
  base* d = new derived(P);

  d-&gt;foo();
  //d-&gt;print();

  delete d;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1832178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832178</guid><dc:creator><![CDATA[Testo]]></dc:creator><pubDate>Mon, 04 Jan 2010 14:33:08 GMT</pubDate></item><item><title><![CDATA[Reply to (abstrakte) Basisklasse mit Konstruktor? on Mon, 04 Jan 2010 15:11:13 GMT]]></title><description><![CDATA[<p>ich hab nicht die geduld alles durchzulesen - aber die hattest du offenbar ja auch nicht:</p>
<pre><code class="language-cpp">int main() 
{ 
  Pattern * P = new Pattern(3); 
  base* d = new derived(P); 

  d-&gt;foo(); 
  //d-&gt;print(); 

  delete d; 
}
</code></pre>
<p>ist nicht besser, als zu vor...</p>
<p>btw: hör doch bitte mit try&amp;error auf - das klappt mit C++ nicht...<br />
Lies einfach im Buch deiner Wahl noch mal die Klassen- + Vererbungs-Kapitel durch...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1832213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1832213</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 04 Jan 2010 15:11:13 GMT</pubDate></item></channel></rss>