<?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[Verwendung von virtuellen Funktionen.]]></title><description><![CDATA[<p>Ich habe mich inzwischen nun schon in die Thematik der Polymorphie in C++ eingelesen doch ich bin noch immer nicht sehr sicher, ob die Verwendung von virtuellen Funktionen bei meiner Problemstellung als sinnvoll zu betrachten ist.<br />
Ich schreibe derzeit eine kleine HttpRequest-Klasse und diese soll HTTP sowie HTTPS (mittels PolarSSL auf dem Port 443) unterstützen.<br />
Folgendens Beispiel hierzu:</p>
<pre><code class="language-cpp">void main() {
  ox::HttpRequest hr;
  hr.ConnectTo(&quot;www.google.com&quot;, 443);

  hr.Send(/* HttpRequest ... */);
}
</code></pre>
<p>Innerhalb der Funktion Send muss nun entschieden werden, ob als Funktion zur Übertragung der eigentlichen Daten nun die Wrapper-Funktion von send() für Port 80 oder die von ssl_write() für Port 443 verwendet werden soll. Derzeit erledige ich das durch ein einfaches If-Konstrukt aber wäre es auch möglich dies eleganter mittels virtueller Funktionen zu lösen?<br />
Die Wrapper für die beiden genannten Funktionen sind bisher in derselben Klasse.</p>
<p>Ich hoffe mein Problem ist deutlich geworden.<br />
MfG, 0x2A.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/278818/verwendung-von-virtuellen-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 23:17:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278818.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Dec 2010 16:24:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verwendung von virtuellen Funktionen. on Mon, 13 Dec 2010 16:24:25 GMT]]></title><description><![CDATA[<p>Ich habe mich inzwischen nun schon in die Thematik der Polymorphie in C++ eingelesen doch ich bin noch immer nicht sehr sicher, ob die Verwendung von virtuellen Funktionen bei meiner Problemstellung als sinnvoll zu betrachten ist.<br />
Ich schreibe derzeit eine kleine HttpRequest-Klasse und diese soll HTTP sowie HTTPS (mittels PolarSSL auf dem Port 443) unterstützen.<br />
Folgendens Beispiel hierzu:</p>
<pre><code class="language-cpp">void main() {
  ox::HttpRequest hr;
  hr.ConnectTo(&quot;www.google.com&quot;, 443);

  hr.Send(/* HttpRequest ... */);
}
</code></pre>
<p>Innerhalb der Funktion Send muss nun entschieden werden, ob als Funktion zur Übertragung der eigentlichen Daten nun die Wrapper-Funktion von send() für Port 80 oder die von ssl_write() für Port 443 verwendet werden soll. Derzeit erledige ich das durch ein einfaches If-Konstrukt aber wäre es auch möglich dies eleganter mittels virtueller Funktionen zu lösen?<br />
Die Wrapper für die beiden genannten Funktionen sind bisher in derselben Klasse.</p>
<p>Ich hoffe mein Problem ist deutlich geworden.<br />
MfG, 0x2A.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993869</guid><dc:creator><![CDATA[0x2A_]]></dc:creator><pubDate>Mon, 13 Dec 2010 16:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to Verwendung von virtuellen Funktionen. on Mon, 13 Dec 2010 16:37:04 GMT]]></title><description><![CDATA[<p>Klingt nach einer sinnvollen Anwendung für Polymorphie. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Ob du eine gemeinsame abstrakte Basisklasse nimmst (würde ich priorisieren)<br />
oder HttpsRequest von HttpRequest ableitest ist Geschmacksache...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993882</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Mon, 13 Dec 2010 16:37:04 GMT</pubDate></item><item><title><![CDATA[Reply to Verwendung von virtuellen Funktionen. on Mon, 13 Dec 2010 17:58:46 GMT]]></title><description><![CDATA[<p>Wobei du schon einen Vorteil durch die Polymorphie sehen solltest (z.B. spätere Erweiterbarkeit, Entkopplung von Programmbestandteilen, etc.).</p>
<p>Einfach nur zwanzig Mal mehr Code schreiben, um keine If-Abfrage verwenden zu müssen... Ich weiss nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993953</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Dec 2010 17:58:46 GMT</pubDate></item><item><title><![CDATA[Reply to Verwendung von virtuellen Funktionen. on Mon, 13 Dec 2010 18:49:12 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort.<br />
Könnte mir jemand schematisch verdeutlichen, wie die Vererbung dieser Klassen in etwa aussehen würde? Mein Problem ist derzeit noch, dass ich zwar viele Beispiele von virtuellen Funktionen gesehen habe aber darauf verzichten möchte, dass der Benutzer meiner Klasse mit den Pointern der Klassen-Objekte hantieren muss:</p>
<pre><code class="language-cpp">...
B b;
C c;

c = &amp;b;

b.do_sth();
c.do_sth();
...
</code></pre>
<p>Derzeit habe ich drei verschiedene &quot;Code-Blöcke&quot;:</p>
<p>- Allgemeiner Code für den HttpRequest<br />
- Code für Http-Verbindungen<br />
- Code für Https-Verbindungen</p>
<p>Der allgemeine Code macht hierbei Gebrauch von den Http- bzw. Https-Code-Blöcken.<br />
Der Aufruf eines Requests sollte wie in dem 1. Post stattfinden ohne das der Nutzer die Pointer manipulieren muss.</p>
<p>MfG, 0x2A</p>
<p>@ Nexus<br />
Es geht mir mehr um das erlangte Wissen bei der Verwendung von Polymorphie. Ich denke aber auch, dass bei diesem Fall virtuelle Methoden als sinnvoll zu betrachten sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1994008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994008</guid><dc:creator><![CDATA[0x2A_]]></dc:creator><pubDate>Mon, 13 Dec 2010 18:49:12 GMT</pubDate></item><item><title><![CDATA[Reply to Verwendung von virtuellen Funktionen. on Mon, 13 Dec 2010 23:05:36 GMT]]></title><description><![CDATA[<p>Ich hab jetzt einfach mal kurz was dazu geschrieben. Ich würde gerne wissen, ob ich mit der Umsetzung so halbwegs auf dem richtigen Weg bin oder ob das ganze schlechter Stil ist und auch anders/einfacher/besser geht! <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">#include &lt;stdio.h&gt;

class Https {
 public:
  inline virtual char* Send(void) const { return &quot;HTTPS&quot;; }
 private:
};

class Http : public Https {
 public:
  inline virtual char* Send(void) const { return &quot;HTTP&quot;; }
 private:
};

class HttpRequest : public Http {
 public:
   explicit HttpRequest() : connection(NULL) { }
   ~HttpRequest() { delete connection; }

  inline void UseHttp(bool is_http) {
    if (is_http) connection = new Http;
    else connection = new Https;
  }
  inline char* test(void) {
    return connection == NULL ? &quot;&quot; : connection-&gt;Send();
  }
 private:
  Https *connection;
};

int main() {
  HttpRequest req;
  req.UseHttp(false);

  printf(&quot;HttpRequest is using %s\n\n&quot;, req.test());

  printf(&quot;Press enter to exit...&quot;);
  if (getc(stdin)) return 0;
}
</code></pre>
<p>MfG, 0x2A!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1994137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994137</guid><dc:creator><![CDATA[0x2A_]]></dc:creator><pubDate>Mon, 13 Dec 2010 23:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to Verwendung von virtuellen Funktionen. on Tue, 14 Dec 2010 07:43:49 GMT]]></title><description><![CDATA[<p>Wieso leitest du HttpRequest von http ab?<br />
Was hälst du von sowas:</p>
<pre><code class="language-cpp">class Protocol
{
public:
  virtual ~Protocol(){}
  virtual void Send(const std::string&amp; host) const = 0;
};
class Http : public Protocol{/*..*/};
class Https : public Protocol{/*..*/};
class Ftp : public Protocol{/*..*/};

class Request
{
public:
  void operator()(const std::string&amp; host, const Protocol&amp; p);
};

int main()
{
  Ftp protocol;
  Request load;
  load(&quot;c-plusplus.net&quot;, protocol);
  return 0;
}
</code></pre>
<p>Der Grund für Polymorphie liegt hier in der Erweiterbarkeit. Möchtest Du ein weiteres Protokoll unterstützen, änderst du deine bestehende Implementierung nicht (geschlossen für Änderungen) also dein if Konstrukt, sondern erweiterst sie durch hinzufügen einer weiteren Protokollklasse (offen für Erweiterung). Ob das im Fall von HTTP || HTTPS Sinn macht musst Du Dir überlegen. Zum Üben aber sicher ein geeignetes Beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1994181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1994181</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Tue, 14 Dec 2010 07:43:49 GMT</pubDate></item></channel></rss>