<?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[Polymorphie]]></title><description><![CDATA[<p>Habe hier ein Designproblem:</p>
<p>Es geht um einen kleinen Wrapper um eine Netzwerkbibliothek. (Der Wrapper wird dann als Bibliothek benutzt).</p>
<p>Ich habe ein Klasse &quot;Message&quot;.</p>
<pre><code class="language-cpp">class Message {
public:
    virtual ~Message();
    /*
        normale methoden.
    */
    /*
        pure virtual methoden, die reimplementiert werden müssen.
    */
};
</code></pre>
<p>Der User leitet seine Messageklasse dann von meiner ab und reimplementiert die Methoden.</p>
<p>Das Problem, dass ich jetzt habe ist:</p>
<p>Wie soll die Signatur der &quot;send&quot; Methode in der Socketklasse aussehen?</p>
<pre><code class="language-cpp">void send(const Message &amp;); // geht nicht, da die constness das nicht erlaubt.
void send(Message &amp;); // würde gehen, aber was ist wenn der User ein const Message übergibt.
void send(const std::shared_ptr&lt;Message&gt;); // würde gehen, ist das aber schön?
</code></pre>
<p>Bedanke mich im voraus für eure Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289857/polymorphie</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 21:46:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289857.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Jul 2011 11:24:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Polymorphie on Thu, 14 Jul 2011 11:24:00 GMT]]></title><description><![CDATA[<p>Habe hier ein Designproblem:</p>
<p>Es geht um einen kleinen Wrapper um eine Netzwerkbibliothek. (Der Wrapper wird dann als Bibliothek benutzt).</p>
<p>Ich habe ein Klasse &quot;Message&quot;.</p>
<pre><code class="language-cpp">class Message {
public:
    virtual ~Message();
    /*
        normale methoden.
    */
    /*
        pure virtual methoden, die reimplementiert werden müssen.
    */
};
</code></pre>
<p>Der User leitet seine Messageklasse dann von meiner ab und reimplementiert die Methoden.</p>
<p>Das Problem, dass ich jetzt habe ist:</p>
<p>Wie soll die Signatur der &quot;send&quot; Methode in der Socketklasse aussehen?</p>
<pre><code class="language-cpp">void send(const Message &amp;); // geht nicht, da die constness das nicht erlaubt.
void send(Message &amp;); // würde gehen, aber was ist wenn der User ein const Message übergibt.
void send(const std::shared_ptr&lt;Message&gt;); // würde gehen, ist das aber schön?
</code></pre>
<p>Bedanke mich im voraus für eure Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092695</guid><dc:creator><![CDATA[sartnem]]></dc:creator><pubDate>Thu, 14 Jul 2011 11:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie on Thu, 14 Jul 2011 11:27:52 GMT]]></title><description><![CDATA[<p>Ändert send jetzt die Message oder nicht?<br />
Wenn nein, dann a), wenn doch, dann darf halt auch keine const-Message übergeben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092700</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 14 Jul 2011 11:27:52 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie on Thu, 14 Jul 2011 11:32:52 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Ändert send jetzt die Message oder nicht?<br />
Wenn nein, dann a), wenn doch, dann darf halt auch keine const-Message übergeben werden.</p>
</blockquote>
<p>Hallo Jockelx,</p>
<p>nein send ändert nicht die Message.<br />
Polymorphie kann man nur mit Referenzen oder Pointer nutzen. Konstante Referenzen gehen nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092705</guid><dc:creator><![CDATA[sartnem]]></dc:creator><pubDate>Thu, 14 Jul 2011 11:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie on Thu, 14 Jul 2011 11:33:51 GMT]]></title><description><![CDATA[<p>sartnem schrieb:</p>
<blockquote>
<p>Polymorphie kann man nur mit Referenzen oder Pointer nutzen. Konstante Referenzen gehen nicht.</p>
</blockquote>
<p>Doch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092706</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 14 Jul 2011 11:33:51 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie on Thu, 14 Jul 2011 11:35:50 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>sartnem schrieb:</p>
<blockquote>
<p>Polymorphie kann man nur mit Referenzen oder Pointer nutzen. Konstante Referenzen gehen nicht.</p>
</blockquote>
<p>Doch.</p>
</blockquote>
<p>OK. Dann mache ich hier was falsch:</p>
<pre><code class="language-cpp">class Base {
public:
	virtual void doSomething() {  }
};

class Derived : public Base {
public:
	virtual void doSomething() { }
};

void foo(const Base &amp;base) {
	base.doSomething();
}

int main() {
	Base *derived = new Derived;
	foo(*derived);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2092708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092708</guid><dc:creator><![CDATA[sartnem]]></dc:creator><pubDate>Thu, 14 Jul 2011 11:35:50 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie on Thu, 14 Jul 2011 11:36:59 GMT]]></title><description><![CDATA[<p>sartnem schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void send(const std::shared_ptr&lt;Message&gt;); // würde gehen, ist das aber schön?
</code></pre>
</blockquote>
<p>Das ist absolute Grütze... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /><br />
Mach dir Gedanken darüber, wer für die Freigabe des Objektes zuständig ist.</p>
<p>Falls die Funktion beispielsweise nicht blockiert, dann sollte es wohl von der Klasse gemacht werden, zu der die send-Funktion gehört.<br />
Ich gehe aber mal davon aus, dass du es blockierend machst, dann sollte eine const Message&amp; wohl die richtige Wahl sein, denn du veränderst, die Nachricht ja vermutlich nicht.<br />
Falls du doch nen Flag für die Message setzt (wie z. B. sent), dann ohne const.</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092709</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Thu, 14 Jul 2011 11:36:59 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie on Thu, 14 Jul 2011 11:39:52 GMT]]></title><description><![CDATA[<p>Die Funktionen müssen <code>const</code> sein:</p>
<pre><code class="language-cpp">class Base {
public:
	virtual void doSomething() const {  }
};

class Derived : public Base {
public:
	virtual void doSomething() const { }
};
</code></pre>
<p>EDIT: Obwohl eine Fehlermeldung generell hilfreich wäre <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/2092711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092711</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Thu, 14 Jul 2011 11:39:52 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie on Thu, 14 Jul 2011 11:40:02 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /><br />
*SCHOCK*!<br />
An das habe ich gar nicht gedacht.</p>
<p>Danke an euch alle!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092712</guid><dc:creator><![CDATA[sartnem]]></dc:creator><pubDate>Thu, 14 Jul 2011 11:40:02 GMT</pubDate></item></channel></rss>