<?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[inklusionspolymorphie]]></title><description><![CDATA[<p>hallo vielleicht kann mir ja jemand von euch helfen. ich muß in dieses kleine programm:</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;<br />
class Multiplikation {<br />
public:<br />
Multiplikation(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) {<br />
}<br />
double ergebnis() const {<br />
return op1_ * op2_;<br />
}<br />
protected:<br />
double op1_,op2_;<br />
};<br />
class Addition {<br />
public:<br />
Addition(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) {<br />
}<br />
double ergebnis() const {<br />
return op1_ + op2_;<br />
}<br />
protected:<br />
double op1_,op2_;<br />
};<br />
void anzeigen(const Multiplikation &amp; ausdruck) {<br />
cout &lt;&lt; ausdruck.ergebnis() &lt;&lt; endl;<br />
}<br />
int main() {<br />
Addition a(2,3);<br />
Multiplikation m(2,3);<br />
anzeigen(a);<br />
anzeigen(m);<br />
return 0;<br />
}</p>
<p>eine Inklusionspolymorphie setzten und bei mir bringt dev-c++ immer den selben Fehler (return-statement with a value, in function returning 'void') in Zeile 12<br />
Programm sieht bei mir dann so aus:</p>
<p>#include &lt;cstdlib&gt;<br />
#include &lt;iostream&gt;</p>
<p>using namespace std;</p>
<p>class Multiplikation<br />
{<br />
public:<br />
virtual void ergebnis() const<br />
{<br />
// cout &lt;&lt; &quot;Exemplar von Multiplikation&quot; &lt;&lt; endl;<br />
return op1_ * op2_;<br />
}<br />
Multiplikation(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) {<br />
}</p>
<p>protected:<br />
double op1_,op2_;<br />
};<br />
class Addition:public Multiplikation {<br />
public:<br />
Addition(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) {<br />
}<br />
void ergebnis() const<br />
{<br />
cout &lt;&lt; &quot;Exemplar von Addition&quot; &lt;&lt; endl;<br />
}<br />
{<br />
return op1_ + op2_;<br />
}<br />
protected:<br />
double op1_,op2_;<br />
};<br />
void test(const Multipliaktion&amp;v)<br />
{<br />
v.ergebnis();<br />
};<br />
//void anzeigen(const Multiplikation &amp; ausdruck) {<br />
//cout &lt;&lt; ausdruck.ergebnis() &lt;&lt; endl;<br />
//}<br />
//void anzeigen(const Addition &amp; ausdruck){<br />
//cout &lt;&lt; ausdruck.ergebnis() &lt;&lt; endl;<br />
//}<br />
int main()<br />
{<br />
Addition a(2,3);<br />
Multiplikation m(2,3);<br />
anzeigen(a);<br />
anzeigen(m);</p>
<p>system(&quot;PAUSE&quot;);<br />
return EXIT_SUCCESS;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144774/inklusionspolymorphie</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 20:30:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144774.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Apr 2006 15:06:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to inklusionspolymorphie on Fri, 21 Apr 2006 15:06:52 GMT]]></title><description><![CDATA[<p>hallo vielleicht kann mir ja jemand von euch helfen. ich muß in dieses kleine programm:</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;<br />
class Multiplikation {<br />
public:<br />
Multiplikation(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) {<br />
}<br />
double ergebnis() const {<br />
return op1_ * op2_;<br />
}<br />
protected:<br />
double op1_,op2_;<br />
};<br />
class Addition {<br />
public:<br />
Addition(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) {<br />
}<br />
double ergebnis() const {<br />
return op1_ + op2_;<br />
}<br />
protected:<br />
double op1_,op2_;<br />
};<br />
void anzeigen(const Multiplikation &amp; ausdruck) {<br />
cout &lt;&lt; ausdruck.ergebnis() &lt;&lt; endl;<br />
}<br />
int main() {<br />
Addition a(2,3);<br />
Multiplikation m(2,3);<br />
anzeigen(a);<br />
anzeigen(m);<br />
return 0;<br />
}</p>
<p>eine Inklusionspolymorphie setzten und bei mir bringt dev-c++ immer den selben Fehler (return-statement with a value, in function returning 'void') in Zeile 12<br />
Programm sieht bei mir dann so aus:</p>
<p>#include &lt;cstdlib&gt;<br />
#include &lt;iostream&gt;</p>
<p>using namespace std;</p>
<p>class Multiplikation<br />
{<br />
public:<br />
virtual void ergebnis() const<br />
{<br />
// cout &lt;&lt; &quot;Exemplar von Multiplikation&quot; &lt;&lt; endl;<br />
return op1_ * op2_;<br />
}<br />
Multiplikation(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) {<br />
}</p>
<p>protected:<br />
double op1_,op2_;<br />
};<br />
class Addition:public Multiplikation {<br />
public:<br />
Addition(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) {<br />
}<br />
void ergebnis() const<br />
{<br />
cout &lt;&lt; &quot;Exemplar von Addition&quot; &lt;&lt; endl;<br />
}<br />
{<br />
return op1_ + op2_;<br />
}<br />
protected:<br />
double op1_,op2_;<br />
};<br />
void test(const Multipliaktion&amp;v)<br />
{<br />
v.ergebnis();<br />
};<br />
//void anzeigen(const Multiplikation &amp; ausdruck) {<br />
//cout &lt;&lt; ausdruck.ergebnis() &lt;&lt; endl;<br />
//}<br />
//void anzeigen(const Addition &amp; ausdruck){<br />
//cout &lt;&lt; ausdruck.ergebnis() &lt;&lt; endl;<br />
//}<br />
int main()<br />
{<br />
Addition a(2,3);<br />
Multiplikation m(2,3);<br />
anzeigen(a);<br />
anzeigen(m);</p>
<p>system(&quot;PAUSE&quot;);<br />
return EXIT_SUCCESS;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042043</guid><dc:creator><![CDATA[ekundu]]></dc:creator><pubDate>Fri, 21 Apr 2006 15:06:52 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Fri, 21 Apr 2006 15:09:52 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Der Rückgabetyp von ergebnis ist void. Somit kann hier bei return (hier nicht nötig) auch nichts zurückgegeben werden.<br />
Bitte benutzte Code-Tags und Einrückungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042044</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 21 Apr 2006 15:09:52 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 09:35:07 GMT]]></title><description><![CDATA[<p>also muß ich alle returns durch void ersetzten wenn ich das richtig verstehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042419</guid><dc:creator><![CDATA[ekundu]]></dc:creator><pubDate>Sat, 22 Apr 2006 09:35:07 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 09:41:19 GMT]]></title><description><![CDATA[<p>Wieso baust du deine &quot;Ergebnis()&quot;-Methoden überhaupt um? Es passt doch besser zu ihrem Namen, wenn sie das Rechenergebnis als Rückgabewert ausspuckt (und außerdem kannst du so auch mehrere Operatoren verschachteln:</p>
<pre><code class="language-cpp">Multiplikation m(1,2);
Addition a(3,m.ergebnis());
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1042423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042423</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 22 Apr 2006 09:41:19 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 09:41:35 GMT]]></title><description><![CDATA[<p>aber ich kann ja nicht einfach return durch void ersetzen! <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/1042424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042424</guid><dc:creator><![CDATA[ekundu]]></dc:creator><pubDate>Sat, 22 Apr 2006 09:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 09:42:31 GMT]]></title><description><![CDATA[<p>ekundu schrieb:</p>
<blockquote>
<p>aber ich kann ja nicht einfach return durch void ersetzen! <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>
</blockquote>
<p>Wie schon gesagt: <strong>WARUM</strong> willst du das überhaupt machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042426</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 22 Apr 2006 09:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 09:43:18 GMT]]></title><description><![CDATA[<p>ich weiß das es am anfang ganz gut aussah aber das ist einfach mal eine ganz schön bescheuerte aufgabe sollen halt verschiedene varrianten zur inklusion benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042427</guid><dc:creator><![CDATA[ekundu]]></dc:creator><pubDate>Sat, 22 Apr 2006 09:43:18 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 09:45:00 GMT]]></title><description><![CDATA[<p>Häh? Kannst du das mal erklären? Was willst du erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042429</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 22 Apr 2006 09:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 09:47:29 GMT]]></title><description><![CDATA[<p>sorry konnte mich nicht so schnell berichtigen ich meine implementierung.<br />
wir hatten einen quelltext vorgegeben ganz simpel eigentlich und sollten dann verschiedene Programmversionen schreiben(5 an der Zahl) die verschiedene Polymorphismen zur Implementierung benutzen.<br />
jetzt klar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042433</guid><dc:creator><![CDATA[ekundu]]></dc:creator><pubDate>Sat, 22 Apr 2006 09:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 10:00:01 GMT]]></title><description><![CDATA[<p>Und jetzt kommt die Millionenfrage: Was haben deine obigen Programmschnipsel mit &quot;Polymorphie&quot; zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042441</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 22 Apr 2006 10:00:01 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 10:08:09 GMT]]></title><description><![CDATA[<p>ja ich weiß sieht nicht professionell aus aber habe grade erst angefangen ich kann dir ja mal die komplette aufgabe posten damit du die ausgangssituatuin kennst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042445</guid><dc:creator><![CDATA[ekundu]]></dc:creator><pubDate>Sat, 22 Apr 2006 10:08:09 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 10:15:56 GMT]]></title><description><![CDATA[<p>Aufgabe 1</p>
<p>Gegeben sind die beiden folgenden Klassen Addition und Multiplikation sowie die<br />
Funktionen main() und anzeigen(), letztere in einer unvollständigen Fassung.</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;<br />
class Multiplikation {<br />
public:<br />
Multiplikation(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) {<br />
}<br />
double ergebnis() const {<br />
return op1_ * op2_;<br />
}<br />
protected:<br />
double op1_,op2_;<br />
};<br />
class Addition {<br />
public:<br />
Addition(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) {<br />
}<br />
double ergebnis() const {<br />
return op1_ + op2_;<br />
}<br />
protected:<br />
double op1_,op2_;<br />
};<br />
void anzeigen(const bitte ergänzen… &amp; ausdruck) {<br />
cout &lt;&lt; ausdruck.ergebnis() &lt;&lt; endl;<br />
}<br />
int main() {<br />
Addition a(2,3);</p>
<p>- 2 -</p>
<p>Multiplikation m(2,3);<br />
anzeigen(a);<br />
anzeigen(m);<br />
return 0;<br />
}</p>
<p>Schreiben Sie nun fünf Programmversionen, die jeweils<br />
· parametrische Polymorphie,<br />
· Inklusionspolymorphie,<br />
· Überladungspolymorphie und<br />
· Typumwandlungspolymorphie mit einem entsprechenden<br />
· Typumwandlungsoperator und einem<br />
· Typumwandlungskonstruktor</p>
<p>zur Implementierung verwenden. Nehmen Sie alle notwendigen Änderungen im Programm selbst vor, also etwa das Einführen einer Basisklasse oder das Einführen neuer Methoden.</p>
<p>Aufgabe 2</p>
<p>Gegeben ist das folgende Programmfragment:</p>
<p>#include &lt;iostream&gt;<br />
#include &lt;cassert&gt;<br />
using namespace std;</p>
<p>class Menge {<br />
public:<br />
Menge():elemente_(0) {<br />
}<br />
Menge(unsigned short int element):elemente_(0) {<br />
assert(element &lt; sizeof(elemente_) * 8);<br />
elemente_ = 1 &lt;&lt; element;<br />
}<br />
Menge(const Menge&amp; m):elemente_(m.elemente_) {<br />
}<br />
Menge vereinigt(const Menge&amp; m) const {<br />
return neueMenge(elemente_ | m.elemente_);<br />
}<br />
Menge geschnitten(const Menge&amp; m) const {<br />
return neueMenge(elemente_ &amp; m.elemente_);<br />
}<br />
Menge komplement() const {<br />
return neueMenge(~elemente_);<br />
}<br />
Menge&amp; elementHinzufuegen(unsigned short int element) {<br />
assert(element &lt; sizeof(elemente_) * 8);<br />
elemente_ |= 1 &lt;&lt; element;<br />
return *this;<br />
}<br />
unsigned short int maechtigkeit() const {<br />
unsigned short int m = 0,<br />
bits = sizeof(elemente_) * 8;<br />
for (unsigned short i = 0; i &lt; bits; ++i)<br />
if (elemente_ &amp; 1 &lt;&lt; i)<br />
++m;<br />
return m;<br />
}<br />
void ausgeben(ostream&amp; os) const {<br />
unsigned short int m = 0,<br />
bits = sizeof(elemente_) * 8;</p>
<p>- 3 -</p>
<p>os &lt;&lt; &quot;{ &quot;;<br />
for (unsigned short i = 0; i &lt; bits; ++i)<br />
if (elemente_ &amp; (1 &lt;&lt; i))<br />
os &lt;&lt; i &lt;&lt; ' ';<br />
os &lt;&lt; &quot;}&quot;;<br />
}<br />
void einlesen(istream&amp; is) {<br />
elemente_ = 0;<br />
unsigned short int element;<br />
char c;<br />
do {<br />
is &gt;&gt; c;<br />
} while (c != '{');<br />
do {<br />
do {<br />
is &gt;&gt; c;<br />
} while (c == ' ');<br />
if (c != ' ' &amp;&amp; c != '}')<br />
is.putback(c);<br />
if (c != '}') {<br />
is &gt;&gt; element;<br />
assert(element &lt; sizeof(elemente_) * 8);<br />
elemente_ |= 1 &lt;&lt; element;<br />
}<br />
} while (c != '}');<br />
}<br />
// Hier Operatoren fuer Komplement und Maechtigkeit ergaenzen<br />
private:<br />
unsigned long elemente_;<br />
static Menge neueMenge(unsigned long elemente) {<br />
Menge m;<br />
m.elemente_ = elemente;<br />
return m;<br />
}<br />
};<br />
ostream&amp; operator&lt;&lt;(ostream&amp; os,const Menge&amp; m) {<br />
ostream::sentry vorUndNacharbeiten(os);<br />
if (vorUndNacharbeiten)<br />
m.ausgeben(os);<br />
return os;<br />
}<br />
istream&amp; operator&gt;&gt;(istream&amp; is,Menge&amp; m) {<br />
istream::sentry vorUndNacharbeiten(is);<br />
if (vorUndNacharbeiten)<br />
m.einlesen(is);<br />
return is;<br />
}<br />
Menge&amp; operator,(Menge&amp; m1,unsigned short element) {<br />
return m1.elementHinzufuegen(element);<br />
}<br />
// Hier Operatoren fuer Vereinigung und Schnitt ergaenzen<br />
int main() {<br />
Menge m1, m2, m3;<br />
m1 = 1, 5, 19; // Elemente 1, 5 und 19 hinzufuegen<br />
cout &lt;&lt; &quot;m1 = &quot; &lt;&lt; m1 &lt;&lt; endl;<br />
m2 = 30, 15, 19; // elemente 15, 19 und 30 hinzufuegen<br />
cout &lt;&lt; &quot;m2 = &quot; &lt;&lt; m2 &lt;&lt; endl;<br />
m3 = m1 | m2; // Vereinigung von m1 und m2<br />
cout &lt;&lt; &quot;m3 = &quot; &lt;&lt; m3 &lt;&lt; endl;<br />
cout &lt;&lt; !m3 &lt;&lt; endl; // Maechtigkeit von m3; ok, kein optimaler Operator<br />
m3 = ~m3; // Komplementaermenge<br />
- 4 -<br />
cout &lt;&lt; &quot;Komplement von m3 = &quot; &lt;&lt; m3 &lt;&lt; endl;<br />
cout &lt;&lt; &quot;Maechtigkeit von m3 = &quot; &lt;&lt; !m3 &lt;&lt; endl; // Maechtigkeit von m3<br />
m3 = m3 &amp; ( m1 | ~m2); // Schnittm. von m3 und (m1 vereinigt Kompl. von m2)<br />
cout &lt;&lt; &quot;Schnittmenge von m3 und (m1 vereinigt komplement von m2) = &quot;<br />
&lt;&lt; m3 &lt;&lt; endl;<br />
cout &lt;&lt; &quot;Maechtigkeit von m3 = &quot; &lt;&lt; !m3 &lt;&lt; endl; // Maechtigkeit von m3<br />
cin &gt;&gt; m3;<br />
cout &lt;&lt; &quot;m3 = &quot; &lt;&lt; m3 &lt;&lt; endl;<br />
cout &lt;&lt; &quot;Maechtigkeit von m3 = &quot; &lt;&lt; !m3 &lt;&lt; endl;<br />
return 0;<br />
}</p>
<p>Implementieren Sie die Operatoren zur Ermittlung der Mächtigkeit (!) und zur Komplementbildung(~) als Memberfunktionen an der dafür vorgesehenen Stelle.<br />
Implentieren Sie die Operatoren für Schnitt (&amp;) und zur Vereinigung (|) von Mengen als freie Funktionen an den dafür vorgesehenen Stellen</p>
<p>Wenn Sie das Programm übersetzen und ausführen, erhalten Sie bei Eingabe der Menge {0 31} den folgenden Ein- und Ausgaben:<br />
m1 = { 1 5 19 }<br />
m2 = { 15 19 30 }<br />
m3 = { 1 5 15 19 30 }<br />
5<br />
Komplement von m3 = { 0 2 3 4 6 7 8 9 10 11 12 13 14 16 17 18 20 21 22 23 24 25<br />
26 27 28 29 31 }<br />
Maechtiegkeit von m3 = 27<br />
Schnittmenge von m3 und (m1 vereinigt komplement von m2) = { 0 2 3 4 6 7 8 9 10<br />
11 12 13 14 16 17 18 20 21 22 23 24 25 26 27 28 29 31 }<br />
Maechtigkeit von m3 = 27<br />
{0 31}<br />
m3 = { 0 31 }<br />
Maechtigkeit von m3 = 2</p>
<p>Tipp: Trennen Sie bei der Eingabe einer Menge die Elemente nicht durch Komma! Ansonsten &quot;hängt&quot; das Programm oder stürzt ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042448</guid><dc:creator><![CDATA[ekundu]]></dc:creator><pubDate>Sat, 22 Apr 2006 10:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sat, 22 Apr 2006 16:11:02 GMT]]></title><description><![CDATA[<p>Verwende endlich Code-Tags!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042768</guid><dc:creator><![CDATA[dEUs]]></dc:creator><pubDate>Sat, 22 Apr 2006 16:11:02 GMT</pubDate></item><item><title><![CDATA[Reply to inklusionspolymorphie on Sun, 23 Apr 2006 08:53:34 GMT]]></title><description><![CDATA[<p>Sorry hier noch mal mit code tags.</p>
<p>Aufgabe 1</p>
<p>Gegeben sind die beiden folgenden Klassen Addition und Multiplikation sowie die<br />
Funktionen main() und anzeigen(), letztere in einer unvollständigen Fassung.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
using namespace std; 
class Multiplikation { 
public: 
Multiplikation(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) { 
} 
double ergebnis() const { 
return op1_ * op2_; 
} 
protected: 
double op1_,op2_; 
}; 
class Addition { 
public: 
Addition(const double&amp; op1,const double&amp; op2):op1_(op1),op2_(op2) { 
} 
double ergebnis() const { 
return op1_ + op2_; 
} 
protected: 
double op1_,op2_; 
}; 
void anzeigen(const Multipliaktion &amp; ausdruck) { 
cout &lt;&lt; ausdruck.ergebnis() &lt;&lt; endl; 
} 
int main() { 
Addition a(2,3); 
Multiplikation m(2,3); 
anzeigen(a); 
anzeigen(m); 
return 0; 
}
</code></pre>
<p>Schreiben Sie nun fünf Programmversionen, die jeweils<br />
· parametrische Polymorphie,<br />
· Inklusionspolymorphie,<br />
· Überladungspolymorphie und<br />
· Typumwandlungspolymorphie mit einem entsprechenden<br />
· Typumwandlungsoperator und einem<br />
· Typumwandlungskonstruktor</p>
<p>zur Implementierung verwenden. Nehmen Sie alle notwendigen Änderungen im Programm selbst vor, also etwa das Einführen einer Basisklasse oder das Einführen neuer Methoden.</p>
<p>Aufgabe 2</p>
<p>Gegeben ist das folgende Programmfragment:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
#include &lt;cassert&gt; 
using namespace std; 

class Menge { 
public: 
Menge():elemente_(0) { 
} 
Menge(unsigned short int element):elemente_(0) { 
assert(element &lt; sizeof(elemente_) * 8); 
elemente_ = 1 &lt;&lt; element; 
} 
Menge(const Menge&amp; m):elemente_(m.elemente_) { 
} 
Menge vereinigt(const Menge&amp; m) const { 
return neueMenge(elemente_ | m.elemente_); 
} 
Menge geschnitten(const Menge&amp; m) const { 
return neueMenge(elemente_ &amp; m.elemente_); 
} 
Menge komplement() const { 
return neueMenge(~elemente_); 
} 
Menge&amp; elementHinzufuegen(unsigned short int element) { 
assert(element &lt; sizeof(elemente_) * 8); 
elemente_ |= 1 &lt;&lt; element; 
return *this; 
} 
unsigned short int maechtigkeit() const { 
unsigned short int m = 0, 
bits = sizeof(elemente_) * 8; 
for (unsigned short i = 0; i &lt; bits; ++i) 
if (elemente_ &amp; 1 &lt;&lt; i) 
++m; 
return m; 
} 
void ausgeben(ostream&amp; os) const { 
unsigned short int m = 0, 
bits = sizeof(elemente_) * 8; 

os &lt;&lt; &quot;{ &quot;; 
for (unsigned short i = 0; i &lt; bits; ++i) 
if (elemente_ &amp; (1 &lt;&lt; i)) 
os &lt;&lt; i &lt;&lt; ' '; 
os &lt;&lt; &quot;}&quot;; 
} 
void einlesen(istream&amp; is) { 
elemente_ = 0; 
unsigned short int element; 
char c; 
do { 
is &gt;&gt; c; 
} while (c != '{'); 
do { 
do { 
is &gt;&gt; c; 
} while (c == ' '); 
if (c != ' ' &amp;&amp; c != '}') 
is.putback(c); 
if (c != '}') { 
is &gt;&gt; element; 
assert(element &lt; sizeof(elemente_) * 8); 
elemente_ |= 1 &lt;&lt; element; 
} 
} while (c != '}'); 
}

// Hier Operatoren fuer Komplement und Maechtigkeit ergaenzen 

private: 
unsigned long elemente_; 
static Menge neueMenge(unsigned long elemente) { 
Menge m; 
m.elemente_ = elemente; 
return m; 
} 
}; 
ostream&amp; operator&lt;&lt;(ostream&amp; os,const Menge&amp; m) { 
ostream::sentry vorUndNacharbeiten(os); 
if (vorUndNacharbeiten) 
m.ausgeben(os); 
return os; 
} 
istream&amp; operator&gt;&gt;(istream&amp; is,Menge&amp; m) { 
istream::sentry vorUndNacharbeiten(is); 
if (vorUndNacharbeiten) 
m.einlesen(is); 
return is; 
} 
Menge&amp; operator,(Menge&amp; m1,unsigned short element) { 
return m1.elementHinzufuegen(element); 
} 

// Hier Operatoren fuer Vereinigung und Schnitt ergaenzen 

int main() { 
Menge m1, m2, m3; 
m1 = 1, 5, 19; // Elemente 1, 5 und 19 hinzufuegen 
cout &lt;&lt; &quot;m1 = &quot; &lt;&lt; m1 &lt;&lt; endl; 
m2 = 30, 15, 19; // elemente 15, 19 und 30 hinzufuegen 
cout &lt;&lt; &quot;m2 = &quot; &lt;&lt; m2 &lt;&lt; endl; 
m3 = m1 | m2; // Vereinigung von m1 und m2 
cout &lt;&lt; &quot;m3 = &quot; &lt;&lt; m3 &lt;&lt; endl; 
cout &lt;&lt; !m3 &lt;&lt; endl; // Maechtigkeit von m3; ok, kein optimaler Operator 
m3 = ~m3; // Komplementaermenge 
cout &lt;&lt; &quot;Komplement von m3 = &quot; &lt;&lt; m3 &lt;&lt; endl; 
cout &lt;&lt; &quot;Maechtigkeit von m3 = &quot; &lt;&lt; !m3 &lt;&lt; endl; // Maechtigkeit von m3 
m3 = m3 &amp; ( m1 | ~m2); // Schnittm. von m3 und (m1 vereinigt Kompl. von m2) 
cout &lt;&lt; &quot;Schnittmenge von m3 und (m1 vereinigt komplement von m2) = &quot; 
&lt;&lt; m3 &lt;&lt; endl; 
cout &lt;&lt; &quot;Maechtigkeit von m3 = &quot; &lt;&lt; !m3 &lt;&lt; endl; // Maechtigkeit von m3 
cin &gt;&gt; m3; 
cout &lt;&lt; &quot;m3 = &quot; &lt;&lt; m3 &lt;&lt; endl; 
cout &lt;&lt; &quot;Maechtigkeit von m3 = &quot; &lt;&lt; !m3 &lt;&lt; endl; 
return 0; 
}
</code></pre>
<p>Implementieren Sie die Operatoren zur Ermittlung der Mächtigkeit (!) und zur Komplementbildung(~) als Memberfunktionen an der dafür vorgesehenen Stelle.<br />
Implentieren Sie die Operatoren für Schnitt (&amp;) und zur Vereinigung (|) von Mengen als freie Funktionen an den dafür vorgesehenen Stellen</p>
<p>Wenn Sie das Programm übersetzen und ausführen, erhalten Sie bei Eingabe der Menge {0 31} den folgenden Ein- und Ausgaben:</p>
<p>m1 = { 1 5 19 }<br />
m2 = { 15 19 30 }<br />
m3 = { 1 5 15 19 30 }<br />
5<br />
Komplement von m3 = { 0 2 3 4 6 7 8 9 10 11 12 13 14 16 17 18 20 21 22 23 24 25<br />
26 27 28 29 31 }<br />
Maechtiegkeit von m3 = 27<br />
Schnittmenge von m3 und (m1 vereinigt komplement von m2) = { 0 2 3 4 6 7 8 9 10<br />
11 12 13 14 16 17 18 20 21 22 23 24 25 26 27 28 29 31 }<br />
Maechtigkeit von m3 = 27<br />
{0 31}<br />
m3 = { 0 31 }<br />
Maechtigkeit von m3 = 2</p>
<p>Tipp: Trennen Sie bei der Eingabe einer Menge die Elemente nicht durch Komma! Ansonsten &quot;hängt&quot; das Programm oder stürzt ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043143</guid><dc:creator><![CDATA[ekundu]]></dc:creator><pubDate>Sun, 23 Apr 2006 08:53:34 GMT</pubDate></item></channel></rss>