<?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[protected Vererbung]]></title><description><![CDATA[<pre><code class="language-cpp">class B:protected A {

public: void foo(){};

};
</code></pre>
<p>&quot;Eine protected abgeleitete Klasse unterscheidet sich in den<br />
Zugriffsrechten von außen nicht von einer privat abgeleiteten Klasse.<br />
Eine Konvertierung ist allerdings innerhalb einer Elementfunktion noch möglich. &quot;</p>
<p>Kann mir das mal einer erklären.Vorallem den letzten Satz ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270347/protected-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 08:10:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270347.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 10 Jul 2010 19:21:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 19:26:30 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class B:protected A {

public: void foo(){};

};
</code></pre>
<p>&quot;Eine protected abgeleitete Klasse unterscheidet sich in den<br />
Zugriffsrechten von außen nicht von einer privat abgeleiteten Klasse.<br />
Eine Konvertierung ist allerdings innerhalb einer Elementfunktion noch möglich. &quot;</p>
<p>Kann mir das mal einer erklären.Vorallem den letzten Satz ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924400</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sat, 10 Jul 2010 19:26:30 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 19:42:24 GMT]]></title><description><![CDATA[<p>Hier ein 'kurzes' Beispiel:</p>
<pre><code class="language-cpp">class A {
protected:
        int a;
};

class B : private A{};

class C : protected A{};

class D : public B{
public:
        void test(){
                a = 0; // hier kannst du nicht drauf zugreifen, da A nur in B sichtbar
        }
};

class E : public C{
public:
        void test(){
                a = 0; // hier kannst du drauf zugreifen, da alle erbenden Klassen diese sehen
        }
};

int main() {
        return 0;
}
</code></pre>
<p>So verstehe ich den Satz jedenfalls bzw. glaube, dass dies gemeint ist</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924406</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 10 Jul 2010 19:42:24 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 21:39:04 GMT]]></title><description><![CDATA[<p>hast Recht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924445</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sat, 10 Jul 2010 21:39:04 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 21:44:21 GMT]]></title><description><![CDATA[<p>Der Destruktor für eine Instanz einer Klasse wird immer aufgerufen ?<br />
Auch wenn es nicht dynamisch angelegt wurde.</p>
<pre><code class="language-cpp">class A{};

int main()
{
A objekt;

}

//Hier wird Destruktor für A aufgerufen.
</code></pre>
<p>WAnn macht es Sinn den Destruktor selbst zu definieren. ABgesehen von virtual destruktor ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924447</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sat, 10 Jul 2010 21:44:21 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 21:50:07 GMT]]></title><description><![CDATA[<p>was passiert überhaupt hier</p>
<pre><code class="language-cpp">A* ptr=new A;

delete ptr;  // wird hier der Destuktor von A aufgerufen ? nein würd ich sagen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1924450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924450</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sat, 10 Jul 2010 21:50:07 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 21:50:42 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>was passiert überhaupt hier</p>
<pre><code class="language-cpp">A* ptr=new A;

delete ptr;  // wird hier der Destuktor von A aufgerufen ? nein würd ich sagen
</code></pre>
</blockquote>
<p>Yup</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924451</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sat, 10 Jul 2010 21:50:42 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 22:17:38 GMT]]></title><description><![CDATA[<p>oki <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>
<p>Was ich immer noch nicht versteh welchen Sinn macht es,<br />
einen Basisklassen Zeiger auf eine abgeleitete Klasse zeigen zu lassen.<br />
Nur dann kommt ja auch der virtual Destruktor ins Spiel.<br />
Warum nicht einen abgeleiteten Zeiger auch auf eine abgeleitete Klasse zeigen lassen. Kostet das mehr oder wo liegt das Problem. Es kostet insofern mehr<br />
dass ich ja dann auch die Methoden von B selber zur Verfügung habe.<br />
Will man das wohl nicht ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924456</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sat, 10 Jul 2010 22:17:38 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 22:25:29 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>WAnn macht es Sinn den Destruktor selbst zu definieren. ABgesehen von virtual destruktor ?</p>
</blockquote>
<p>Es gibt einige Fälle, wo es sinnvoll ist.<br />
Häufig braucht man ihn um Resourcem freizugeben, die im Konstrukor (auf dem Heap)<br />
angelegt wurden. (RAII)<br />
<a href="http://de.wikipedia.org/wiki/RAII" rel="nofollow">http://de.wikipedia.org/wiki/RAII</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924458</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 10 Jul 2010 22:25:29 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 22:31:00 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>oki <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>
<p>Was ich immer noch nicht versteh welchen Sinn macht es,<br />
einen Basisklassen Zeiger auf eine abgeleitete Klasse zeigen zu lassen.<br />
Nur dann kommt ja auch der virtual Destruktor ins Spiel.<br />
Warum nicht einen abgeleiteten Zeiger auch auf eine abgeleitete Klasse zeigen lassen. Kostet das mehr oder wo liegt das Problem. Es kostet insofern mehr<br />
dass ich ja dann auch die Methoden von B selber zur Verfügung habe.<br />
Will man das wohl nicht ?</p>
</blockquote>
<p>Da kommt das mit dem virtual in's Spiel. Das kann man ja nicht nur mit dem Destruktor machen sondern auch mit allen anderen Methoden. Und das ist sehr oft erwünscht. Zum Nachschlagen: Das nennt sich Polymorphie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924460</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 10 Jul 2010 22:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 22:32:45 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>oki <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 />
Was ich immer noch nicht versteh welchen Sinn macht es,<br />
einen Basisklassen Zeiger auf eine abgeleitete Klasse zeigen zu lassen.<br />
Nur dann kommt ja auch der virtual Destruktor ins Spiel.</p>
</blockquote>
<p>Ich hab gerade Bananen im Supermarkt gekauft, jetzt lege ich sie in einen<br />
(selbstentsorgenden) Obstkorb. Wenn die Früchte darin verfault sind, werden<br />
sie weggeworfen (gelöscht). Jetzt interessiert den Obstkorb nicht, ob ne Banane oder<br />
nen Apfel verfault ist, sondern er wirft das Obst einfach weg (delete obst)</p>
<p>EDIT: Obst hat natürlich ne Funktion getVerfallsdatum()</p>
<p>Vielleicht etwas albern, aber evtl hilft es <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924461</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 10 Jul 2010 22:32:45 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 23:33:37 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Obst{public: void verfaulen(){}};

class Banane:public Obst { public: void reifen(){} };

int main()
{

Obst* x= new Banane ;   // macht das hier Sinn ???

//oder

Banane* x=new Banane;   // jetzt kann man wenigstens auf reifen() zugreifen

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1924473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924473</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sat, 10 Jul 2010 23:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sat, 10 Jul 2010 23:54:30 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Point2D
{
public:
virtual ~Point2D(){}
private:
	double m_x, m_y;
};
</code></pre>
<p>sizeof(Point2D) ergibt 24 Byte</p>
<p>wenn ich aber im private statt double 2 int deklariere bekomme ich 12 Byte.</p>
<p>Wie gibts das ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924477</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sat, 10 Jul 2010 23:54:30 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 00:00:05 GMT]]></title><description><![CDATA[<p>double ist kleiner als int, deswegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924479</guid><dc:creator><![CDATA[ghostboss]]></dc:creator><pubDate>Sun, 11 Jul 2010 00:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 00:05:23 GMT]]></title><description><![CDATA[<p>Stell dir mal vor, du hast sowas hier:</p>
<pre><code class="language-cpp">Obst *liste[3];
</code></pre>
<p>Dann kannst du das hier machen:</p>
<pre><code class="language-cpp">liste[0] = new Apfel();
liste[1] = new Birne();
liste[2] = new Banane();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1924480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924480</guid><dc:creator><![CDATA[Anna Thornton-Wilton]]></dc:creator><pubDate>Sun, 11 Jul 2010 00:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 00:11:51 GMT]]></title><description><![CDATA[<p>ghostboss schrieb:</p>
<blockquote>
<p>double ist kleiner als int, deswegen.</p>
</blockquote>
<p>Geh ins Bett o.O</p>
<p>Double hat die Große 8<br />
Int hat die Größe 4<br />
Pointer ist ebenfalls 4.</p>
<p>2x Double + virtual Pointer ergibt 20 angezeigt 24, da werden 4 Bytes als Padding verwendet.<br />
<a href="http://msdn.microsoft.com/en-us/library/ms253935.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms253935.aspx</a></p>
<p>2x Int + virtual Pointer ergibt 12 angezeigt 12</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924481</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sun, 11 Jul 2010 00:11:51 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 00:15:40 GMT]]></title><description><![CDATA[<p>Diese Klasse hat die unglaubliche Größe von 32 Byte.<br />
Wie gibts das. char sagen wir mal 4 Byte *2 + 2*double = 24 Byte</p>
<p>Wahrscheinlich um auf eine gerade Speicheradresse zu kommen.</p>
<p>Das Padding kann ja ganz schön speicher kosten <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">class B
{
public:
	B(void);
	~B(void);
private:
	char m_1;
	double m_3;
	char m_2;
	double m_4;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1924483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924483</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sun, 11 Jul 2010 00:15:40 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 00:44:36 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Double hat die Große 8<br />
Int hat die Größe 4<br />
Pointer ist ebenfalls 4.</p>
</blockquote>
<p>Diese Größen sind (strenggenommen) Compiler- und System-abhängig.<br />
Bei meinem 64-bit System ist ein Pointer z. B. 8 Byte.<br />
-&gt; Ich vermute du hast (noch) ein 32-bit System?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924484</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 11 Jul 2010 00:44:36 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 00:48:42 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>Diese Klasse hat die unglaubliche Größe von 32 Byte.<br />
Wie gibts das. char sagen wir mal 4 Byte *2 + 2*double = 24 Byte</p>
<p>Wahrscheinlich um auf eine gerade Speicheradresse zu kommen.</p>
<p>Das Padding kann ja ganz schön speicher kosten <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">class B
{
public:
	B(void);
	~B(void);
private:
	char m_1;
	double m_3;
	char m_2;
	double m_4;
};
</code></pre>
</blockquote>
<p>Änder einfach mal die Reihenfolge in char, char, double, double oder<br />
in double, double, char, char und du hast (wahrscheinlich) nur noch 24 Byte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924486</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 11 Jul 2010 00:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 00:52:47 GMT]]></title><description><![CDATA[<p>Nö, 64 bit, heisst aber nicht, dass ich auch in 64-Bit Mode kompiliere *gg*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924487</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sun, 11 Jul 2010 00:52:47 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 01:07:28 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Nö, 64 bit, heisst aber nicht, dass ich auch in 64-Bit Mode kompiliere *gg*</p>
</blockquote>
<p>Mir war klar, dass du nur die Größenangaben begründen wolltest.<br />
Die 32-bit Aussage ging Richtung blurry333</p>
<p>Hast du wirklich im 32bit Modus kompiliert? Ich hätte gesagt, du hast gar nichts kompiliert <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924488</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 11 Jul 2010 01:07:28 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 09:17:32 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Zeus schrieb:</p>
<blockquote>
<p>Double hat die Große 8<br />
Int hat die Größe 4<br />
Pointer ist ebenfalls 4.</p>
</blockquote>
<p>Diese Größen sind (strenggenommen) Compiler- und System-abhängig.<br />
Bei meinem 64-bit System ist ein Pointer z. B. 8 Byte.<br />
-&gt; Ich vermute du hast (noch) ein 32-bit System?</p>
</blockquote>
<p>Ups ich hab ja auch ein 64 Bit Windows 7 Betriebssystem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924533</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sun, 11 Jul 2010 09:17:32 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 09:26:36 GMT]]></title><description><![CDATA[<p>aber :</p>
<pre><code class="language-cpp">int main()
{
int y=7;
int *x=&amp;y;	

cout&lt;&lt;sizeof(x);  // Ausgabe 4 Byte !!!
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1924537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924537</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sun, 11 Jul 2010 09:26:36 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 09:43:10 GMT]]></title><description><![CDATA[<p>Dann hast du dein Programm wohl für 32 Bit kompiliert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924539</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 11 Jul 2010 09:43:10 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 18:12:10 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>WAnn macht es Sinn den Destruktor selbst zu definieren. ABgesehen von virtual destruktor ?</p>
</blockquote>
<p>Einen eigenen Destruktor brauchst Du immer dann, wenn der Defaultdestruktor nicht alles abräumen kann. Der Defaultdestruktor ruft einfach die Destruktoren aller Membervariablen auf. Sonst macht der nichts. Wenn eine Deiner Membervariablen z.B. ein Pointer ist, mußt Du einen eigenen Destruktor erzeugen, der den Speicher eventuell frei gibt:</p>
<pre><code class="language-cpp">class x
{
    TYPE *pointer;
    x() { pointer=NULL }
    ~x() { if( pointer ) free(pointer); }    // oder delete pointer;

    ....
};
</code></pre>
<p>Der Default destruktor würde den Speicher nicht freigeben. Gleiches gilt auch für Filehandles, Fensterhandles und ähnliches.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924721</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Sun, 11 Jul 2010 18:12:10 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 18:27:24 GMT]]></title><description><![CDATA[<p>mgaeckler schrieb:</p>
<blockquote>
<pre><code class="language-cpp">~x() { if( pointer ) free(pointer); }    // oder delete pointer;
</code></pre>
</blockquote>
<p>mgaeckler meinte natürlich:</p>
<pre><code class="language-cpp">~x() { if( pointer ) delete pointer; }    // oder (in Ausnahmen) free(pointer);
</code></pre>
<p>Jetzt verführ keinen Neuling dazu malloc und free zu benutzen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23381">@blurry333</a>: In C++ verwendet man i. d. R. new und delete <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924724</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 11 Jul 2010 18:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to protected Vererbung on Sun, 11 Jul 2010 18:29:16 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>oki <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>
<p>Was ich immer noch nicht versteh welchen Sinn macht es,<br />
einen Basisklassen Zeiger auf eine abgeleitete Klasse zeigen zu lassen.</p>
</blockquote>
<p>Ich habe beispielsweise eine Klassenbibliothek für die Windows API.</p>
<p>Die Basisklasse kapselt das Fensterhandle. Abgeleitete Klassen spezialisieren sich dann immer mehr:</p>
<p>Selbstdefinierte Windowsklassen,<br />
Edit Controls, Comboboxen, Listboxen, MDI-Fenster, MDI-Childs usw. usf.</p>
<p>Einer meiner Container enthält eine Liste aller Fenster mit selbst definierten Klassen. Der Container selber kennt aber nur die BASIS-Klasse aller selbst defnierten Fenster. Applikationsspezifische Klassen kann er gar nicht kennen, da er Teil der Bibliothek ist.</p>
<p>Er liefert daher immer nur einen Zeiger auf die Basisklasse zurück. Wenn der Anwendung in dem Kontext das auch genügt, wird sie das auch so lassen. Ansonsten muß halt gecastet werden.</p>
<p>Der Container ist auch dafür verantworlich, Windows Messages an die Instanzen der Fensterklassen zu verteilen. Dafür sind dann die virtuellen Funktionen zwingend erforderlich, da er applikationsspezifische Messagehandler gar nicht kennen kann.</p>
<p>Generel brauchst Du das, wenn ein Container Zeiger auf Instanzen von Klassen speichern muß, bei denen er nur die Basisklasse kennt.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924725</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Sun, 11 Jul 2010 18:29:16 GMT</pubDate></item></channel></rss>