<?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[Ableitungen ohne erneute Definitionen jedes Konstruktors]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich bin derzeit dabei mich endlich in die OOP einzuarbeiten. Als alter C Programmierer fallen da einige Sachen einem, vom Verständnis her, ein wenig schwer <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 />
Ich bastle hier an ein paar Klassen aus Übungszwecken rum. Wiederverwendbar, jo, das sollten sie wohl sein. Doch habe ich ein Verständnisproblem. Ich habe schon diverse Klassen deklariert. Dabei ist eine kleine Klassenhierarchie entstanden. B erbt von A und C von B,...<br />
Auch finde ich langsam Gefallen an virtuellen Funktionen, doch ein Problem beschäftigt mich im Moment:<br />
Angenommen ich habe eine tolle Klasse mit dem Namen A erstellt. Eine Klasse die mir zukünftig das Leben versüßen wird, weil sie die Funktionalitäten kapselt, welche ich ständig brauche. Diese klasse A verfügt über einen Konstruktor mit mehreren Parametern. Der Standardkonstruktor ist private weil es keinen Sinn machen würde ihn ohne Argumente zu initialisieren. Nun will die Applikation die Klasse A benutzen. Hierbei kommt nur die erneute Ableitung in Frage, weil die eigentliche Funktionalität erweitert werden soll. Eigentlich will sich die Aplikation nur in ein paar virtuelle Funktionen einklinken, doch ich bin gezwungen einen neuen Konstruktor für die Klasse zu schreiben:</p>
<pre><code class="language-cpp">class B : public A
{
   B(foo, foo, foo, foo);   
   void IrendeineVirtuelleFunktion();
}
B::B(foo foo1, foo foo2, foo foo3, foo foo4) :
A(foo1,foo2,foo3,foo4)
{
}
B::IrgendeineVirtuelleFunktion()
{
...
}
</code></pre>
<p>Im Endeffekt mache ich nichts anderes wie den Konstruktor der Basisklasse mit den gleichen Parametern aufzurufen. Nun möchte man meinen, dieser Aufwand sei nicht sonderlich schlimm. 3 Zeilen Code, naja, was ist das schon? Doch was ist, wenn ich viele verschiedene Konstruktoren habe? Und alle sollen in der abgeleiteten Klasse genauso zur Verfügung stehen und die Funktionen der Basisklasse aufrufen, wenn nicht anders definiert. Wenn sich das ganze über mehre Vererbungshierachien fortsetzt endet das imho in einem schlimmen Chaos. Da ich davon ausgehe, dass jemand anderes meine Klassen vielleicht benutzen möchte, denke ich, wird dieser abgeschreckt werden, wenn ich ihm vorher erst erklären muss, welche Konstruktoren er wie zu implementieren hat. Dies widerspricht mir, in meinem innersten, dem Gefühl der Wiederverwendbarkeit, und ich denke, dass ich die Sache vermutlich falsch angehe. Auslassen kann ich die erneute Deklaration des Konstruktors nicht. Sonst meldet VC++2005 beim Aufruf von B myB = B(foo,foo,foo,foo);:<br />
C2512: 'B' Kein geeigneter Standradkonstruktor verfügbar<br />
Ok möglicherweise gehe ich alles komplett falsch an, und mein Lösungsansatz ist total daneben. Vielleicht übersehe ich auch nur eine Kleinigkeit. Ich hoffe irgendjemand von euch versteht den Quell meiner Verwirrung und kann mir helfen <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/topic/221422/ableitungen-ohne-erneute-definitionen-jedes-konstruktors</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 09:07:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221422.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Aug 2008 21:19:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ableitungen ohne erneute Definitionen jedes Konstruktors on Thu, 28 Aug 2008 21:19:12 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich bin derzeit dabei mich endlich in die OOP einzuarbeiten. Als alter C Programmierer fallen da einige Sachen einem, vom Verständnis her, ein wenig schwer <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 />
Ich bastle hier an ein paar Klassen aus Übungszwecken rum. Wiederverwendbar, jo, das sollten sie wohl sein. Doch habe ich ein Verständnisproblem. Ich habe schon diverse Klassen deklariert. Dabei ist eine kleine Klassenhierarchie entstanden. B erbt von A und C von B,...<br />
Auch finde ich langsam Gefallen an virtuellen Funktionen, doch ein Problem beschäftigt mich im Moment:<br />
Angenommen ich habe eine tolle Klasse mit dem Namen A erstellt. Eine Klasse die mir zukünftig das Leben versüßen wird, weil sie die Funktionalitäten kapselt, welche ich ständig brauche. Diese klasse A verfügt über einen Konstruktor mit mehreren Parametern. Der Standardkonstruktor ist private weil es keinen Sinn machen würde ihn ohne Argumente zu initialisieren. Nun will die Applikation die Klasse A benutzen. Hierbei kommt nur die erneute Ableitung in Frage, weil die eigentliche Funktionalität erweitert werden soll. Eigentlich will sich die Aplikation nur in ein paar virtuelle Funktionen einklinken, doch ich bin gezwungen einen neuen Konstruktor für die Klasse zu schreiben:</p>
<pre><code class="language-cpp">class B : public A
{
   B(foo, foo, foo, foo);   
   void IrendeineVirtuelleFunktion();
}
B::B(foo foo1, foo foo2, foo foo3, foo foo4) :
A(foo1,foo2,foo3,foo4)
{
}
B::IrgendeineVirtuelleFunktion()
{
...
}
</code></pre>
<p>Im Endeffekt mache ich nichts anderes wie den Konstruktor der Basisklasse mit den gleichen Parametern aufzurufen. Nun möchte man meinen, dieser Aufwand sei nicht sonderlich schlimm. 3 Zeilen Code, naja, was ist das schon? Doch was ist, wenn ich viele verschiedene Konstruktoren habe? Und alle sollen in der abgeleiteten Klasse genauso zur Verfügung stehen und die Funktionen der Basisklasse aufrufen, wenn nicht anders definiert. Wenn sich das ganze über mehre Vererbungshierachien fortsetzt endet das imho in einem schlimmen Chaos. Da ich davon ausgehe, dass jemand anderes meine Klassen vielleicht benutzen möchte, denke ich, wird dieser abgeschreckt werden, wenn ich ihm vorher erst erklären muss, welche Konstruktoren er wie zu implementieren hat. Dies widerspricht mir, in meinem innersten, dem Gefühl der Wiederverwendbarkeit, und ich denke, dass ich die Sache vermutlich falsch angehe. Auslassen kann ich die erneute Deklaration des Konstruktors nicht. Sonst meldet VC++2005 beim Aufruf von B myB = B(foo,foo,foo,foo);:<br />
C2512: 'B' Kein geeigneter Standradkonstruktor verfügbar<br />
Ok möglicherweise gehe ich alles komplett falsch an, und mein Lösungsansatz ist total daneben. Vielleicht übersehe ich auch nur eine Kleinigkeit. Ich hoffe irgendjemand von euch versteht den Quell meiner Verwirrung und kann mir helfen <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/1573283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573283</guid><dc:creator><![CDATA[Halbleiter]]></dc:creator><pubDate>Thu, 28 Aug 2008 21:19:12 GMT</pubDate></item><item><title><![CDATA[Reply to Ableitungen ohne erneute Definitionen jedes Konstruktors on Thu, 28 Aug 2008 21:53:13 GMT]]></title><description><![CDATA[<p>versuche, konzepte der oop zu lesen.<br />
klassen müssen sinn machen, klein sein, übersichtlich.<br />
objekte sind instanzen von klassen, sie haben eine identität, einen zustand, eine lebensdauer.<br />
sie senden sich nachrichten.<br />
konstruktoren dienen zur initialisierung der membervariablen.<br />
ansonsten gibt es methoden, die nachrichten senden/empfangen.<br />
viele werden es nicht sein, objekte reden nicht mit jedem.<br />
abhängigkeiten sind klein zu halten.</p>
<p>vererbung geht nicht in die unendliche tiefe.<br />
vererbung wurde bis jetzt nicht so wichtig.</p>
<p>polymorphie ist nochmal anders zu denken als vererbung...</p>
<p>lese konzepte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573288</guid><dc:creator><![CDATA[elise]]></dc:creator><pubDate>Thu, 28 Aug 2008 21:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to Ableitungen ohne erneute Definitionen jedes Konstruktors on Thu, 28 Aug 2008 22:32:38 GMT]]></title><description><![CDATA[<p>Das beantwortet aber nicht die frage ob sowas generell möglich ist</p>
<p>reales beispiel:</p>
<p>ich habe eine eigene autoptr klasse für den umgang mit zeigern<br />
diese klasse ist referenzzählend und soll für arrays, normale zeiger und<br />
COM-objekte diene</p>
<p>die basisfunktionalität ist immer gleich, jedoch im destruktor habe ich<br />
einen unterschied nämlich<br />
delete für zeiger<br />
delete[] für arrays und<br />
Release für COM objekte</p>
<p>1. ansatz (nicht das beste aber pasend)</p>
<pre><code class="language-cpp">class basic_ptr
{
    ctor
    copyctor
    dtor
    operator =
};
class array_ptr : public basic_ptr
{
    ctor
    copyctor
    dtor
    operator =
};
// dasselbe für die beiden anderen klassen
</code></pre>
<p>da diese memberfunktionen nicht vererbt werden müsste ich sie jedesmal neu schreiben, [b]wie kann man das verhindern{/b] ist die frage</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1573296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1573296</guid><dc:creator><![CDATA[gegenfrage]]></dc:creator><pubDate>Thu, 28 Aug 2008 22:32:38 GMT</pubDate></item></channel></rss>