<?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[suche nach Mechanismus zur Kommunikation zwischen Klassentypen.]]></title><description><![CDATA[<p>Hallo,<br />
ich beschreibe kurz was ich erreichen möchte:</p>
<p>Es gibt 3 oder mehr Klassen</p>
<pre><code class="language-cpp">class
</code></pre>
<pre><code class="language-cpp">class Timer
</code></pre>
<pre><code class="language-cpp">class EventHandler
</code></pre>
<p>ich möchte in einer oder mehreren memberFunktionen der Klasse Application<br />
die MemberFunktion</p>
<pre><code class="language-cpp">getTime()
</code></pre>
<p>aus der Klasse Timer nutzen.<br />
Ausserdem möchte ich die gleiche Funktion auch in einigen Memberfunktionen der Klasse</p>
<pre><code class="language-cpp">EventHandler
</code></pre>
<p>nutzen.<br />
Und einige memberFunktionen der</p>
<pre><code class="language-cpp">EventHandler
</code></pre>
<p>Klasse auch wieder in der</p>
<pre><code class="language-cpp">Application
</code></pre>
<p>Klasse.</p>
<p>Natürlich sind alle genannten Funktionen public.<br />
Und natürlich sollen die Objecte der Klassen nicht global sein.</p>
<p>Ich hatte bis jetzt fogende Ansätze:<br />
Man könnte einfach in jeder Klasse in der z.B. eine Funktion der Klasse Timer benötigt wird ein solches Object erzeugen und benutzen.</p>
<p>Man könnte alle Klassen die die Funktionalität von Timer brauchen, von Timer erben lassen.</p>
<p>Beim ersten habe ich das Problem das ich Daten doppelt und vielfach habe.</p>
<p>Beim zweiten habe ich nachher ein Klasse die vielleicht von 10 anderen erben muss. Scheint mir nicht der richtige Weg zu sein.</p>
<p>Es heißt ja das das OO programmieren das versenden von Nachrichten zwischen Objecten ist.<br />
Leider weiß ich nicht wie ich so ein Mechanismus ins Programm reinbekomme.</p>
<p>Es wäre super wenn ich von der Application Klasse einen Aufruf machen könnte z.B.</p>
<pre><code class="language-cpp">requestTime()
</code></pre>
<p>und die Klasse die diese nachricht verstehen kann, darauf darauf die dazugehörige Funktion ausführt und an die anfragende zurückgibt.</p>
<p>Mir ist klar das es eine Nachrichten verwaltende Klasse geben muss aber ich habe keine Idee wie das alles zusammenhängen muss.</p>
<p>Wenn jamand helfen könnte wäre ich dankbar.<br />
Muss auch kein Aufsatz sein wie der hier. <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>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227771/suche-nach-mechanismus-zur-kommunikation-zwischen-klassentypen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 18:39:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227771.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Nov 2008 19:35:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to suche nach Mechanismus zur Kommunikation zwischen Klassentypen. on Wed, 19 Nov 2008 19:35:51 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich beschreibe kurz was ich erreichen möchte:</p>
<p>Es gibt 3 oder mehr Klassen</p>
<pre><code class="language-cpp">class
</code></pre>
<pre><code class="language-cpp">class Timer
</code></pre>
<pre><code class="language-cpp">class EventHandler
</code></pre>
<p>ich möchte in einer oder mehreren memberFunktionen der Klasse Application<br />
die MemberFunktion</p>
<pre><code class="language-cpp">getTime()
</code></pre>
<p>aus der Klasse Timer nutzen.<br />
Ausserdem möchte ich die gleiche Funktion auch in einigen Memberfunktionen der Klasse</p>
<pre><code class="language-cpp">EventHandler
</code></pre>
<p>nutzen.<br />
Und einige memberFunktionen der</p>
<pre><code class="language-cpp">EventHandler
</code></pre>
<p>Klasse auch wieder in der</p>
<pre><code class="language-cpp">Application
</code></pre>
<p>Klasse.</p>
<p>Natürlich sind alle genannten Funktionen public.<br />
Und natürlich sollen die Objecte der Klassen nicht global sein.</p>
<p>Ich hatte bis jetzt fogende Ansätze:<br />
Man könnte einfach in jeder Klasse in der z.B. eine Funktion der Klasse Timer benötigt wird ein solches Object erzeugen und benutzen.</p>
<p>Man könnte alle Klassen die die Funktionalität von Timer brauchen, von Timer erben lassen.</p>
<p>Beim ersten habe ich das Problem das ich Daten doppelt und vielfach habe.</p>
<p>Beim zweiten habe ich nachher ein Klasse die vielleicht von 10 anderen erben muss. Scheint mir nicht der richtige Weg zu sein.</p>
<p>Es heißt ja das das OO programmieren das versenden von Nachrichten zwischen Objecten ist.<br />
Leider weiß ich nicht wie ich so ein Mechanismus ins Programm reinbekomme.</p>
<p>Es wäre super wenn ich von der Application Klasse einen Aufruf machen könnte z.B.</p>
<pre><code class="language-cpp">requestTime()
</code></pre>
<p>und die Klasse die diese nachricht verstehen kann, darauf darauf die dazugehörige Funktion ausführt und an die anfragende zurückgibt.</p>
<p>Mir ist klar das es eine Nachrichten verwaltende Klasse geben muss aber ich habe keine Idee wie das alles zusammenhängen muss.</p>
<p>Wenn jamand helfen könnte wäre ich dankbar.<br />
Muss auch kein Aufsatz sein wie der hier. <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>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1617340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1617340</guid><dc:creator><![CDATA[socco]]></dc:creator><pubDate>Wed, 19 Nov 2008 19:35:51 GMT</pubDate></item><item><title><![CDATA[Reply to suche nach Mechanismus zur Kommunikation zwischen Klassentypen. on Thu, 20 Nov 2008 05:18:32 GMT]]></title><description><![CDATA[<p>in C++ ist das von dir genannte &quot;nachrichten Versenden&quot; schlicht und einfach das Aufrufen von Methoden der Empfängerklasse. Wenn in der (recht abstrakt gehaltenen) Literatur über Objektorientierte Programmierung im allgemeinen etwas steht wie &quot;Ein Objekt a der Klasse A schickt einen Nachricht XY an das Objekt b der Klasse B&quot; dann heißt das in C++ ganz einfach</p>
<pre><code class="language-cpp">//irgendwo in einer Methode von A
b.XY();
</code></pre>
<p>Was deine Dreiecksbeziehung angeht:<br />
um getTime() zu benutzen brauchst du allerdings entweder ein Objekt vom Typ Timer, oder zumindest eine Referenz (bzw. einen Zeiger) auf ein solches Objekt. Es sei denn, getTime() ist static, dann reicht einfach ein Aufruf der Form <code>Timer::getTime()</code><br />
Es kommt jetzt auf die Programmlogik und die Semantik der getTime()-Methode an, ob sich die Objekte jeweils ein unabhängiges Timer-Objekt erzeugen können oder ob die benutzten Timer-Objekte voneinander abhängig sein müssen (also das selbe Objekt oder Kopien des selben Objektes). Außerdem ist es eine Designentscheidung, ob sich die Objekte von Application und EventHandler die ganze Zeit ein eigenes Timer-Objekt halten (als Member), ob sie die ganze Zeit eine Referenz (oder Zeiger) auf ein externes Timer-Objekt halten, oder ob es sinnvoller ist, dass sie sich nur an den Stellen wo eins benötigt wird (innerhalb der Methoden) ein eigenes Objekt erzeugen bzw. es sich beim Aufruf der fraglichen Methoden einfahc mit übergeben lassen.</p>
<p>/edit: Erben ist mit ziemlicher Sicherheit nicht die richtige Entscheidung. öffentliches Erben bedeutet immer eine &quot;Ist-ein&quot;-Beziehung, also &quot;Eine Application ist ein Timer&quot;, &quot;Ein EventHandler ist ein Timer&quot;. Privates bzw. geschütztes Erben macht allgemein nur dann Sinn, wenn der Timer protected Elemente hat, auf die die erbende Klasse Zugriff braucht (was dann bedeutet, dass der Timer für eine solche Art der Vererbung designt ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1617455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1617455</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 20 Nov 2008 05:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to suche nach Mechanismus zur Kommunikation zwischen Klassentypen. on Thu, 20 Nov 2008 08:36:00 GMT]]></title><description><![CDATA[<p>Man kann das mit den Messages auch so machen, wie es die WinAPI macht.<br />
Da kann man Messages an ein Fenster senden und das Fenster kann dann die Messages auswerten (in einer Funktion, die vom System aufgerufen wird und die Parameter übergibt).<br />
Das praktische ist natürlich, dass der Sender und Empfänger sich überhaupt nich kennen müssen. Das ganze kannst du natürlich auch in einer eigenen Klasse simulieren, indem du ein paar Messages definierst und dann (das offensichtlichste) ein Singleton hast, dass dir die ganzen Messages speichert und an eine bestimme Funktion weiterleitet. Dort wertest du dann die Messages aus (oder nicht) und nach dem Aufruf werden vlt. bestimmte Messages von deiner Klasse ausgewertet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1617514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1617514</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 20 Nov 2008 08:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to suche nach Mechanismus zur Kommunikation zwischen Klassentypen. on Thu, 20 Nov 2008 16:40:00 GMT]]></title><description><![CDATA[<p>vielen dank,<br />
das hilft meinem Verständnis etwas weiter.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@drakon</a>: könntest du es noch genauer umschreiben, wie ich das konkret machen sollte - anhand meiner 3 Klassen - an genau so ein System wie Windows es hat habe ich nähmlich auch gedacht.<br />
Verstehe aber nicht wie es genau umzusetzten ist.<br />
Jede Funktion müsste ja so etwas wie eine ID bekommen. Diese ID Liste müsste dann jede Klasse kennen und damit etwas anfangen können. Es muss also eine Basisklasse geben die das kann und von der alle erben.<br />
Soweit meine Theorie - wie ich das umsetzte, steht irgendwo auf einem anderen Blatt.<br />
Also trau dich ruhig etwas näher darauf einzugehen. <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>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>:</p>
<pre><code class="language-cpp">static
</code></pre>
<p>ist ein gutes Stichwort - thx.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1617838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1617838</guid><dc:creator><![CDATA[socco]]></dc:creator><pubDate>Thu, 20 Nov 2008 16:40:00 GMT</pubDate></item><item><title><![CDATA[Reply to suche nach Mechanismus zur Kommunikation zwischen Klassentypen. on Fri, 21 Nov 2008 06:06:35 GMT]]></title><description><![CDATA[<p>Ne. Das läuft eher darauf hinaus, dass du irgenwo Funktionszeiger speicherst, die eine bestimmte Schnittstelle anbieten müssen. Dann kannst du die einfach in (z.B) Singleton in einer Liste speichern und dann jede Funktion durchen und aufrufen.</p>
<pre><code class="language-cpp">class Manager : Singleton&lt;Manager&gt;
{
 void Register ( int (*fp)(int,...) )
 {
   functions.push_back ( fp );
 }

 list&lt;FunctionPointerType&gt; functions;
};
...

int AppFunc ( int message,...)
{
 switch (message)
 {
   case MYWM_CLOSE:
    Shutdown;
    break;
 }
...
}

...

Manager::Register ( &amp;AppFunc );
</code></pre>
<p>So in etwa. Natürlich kannst du das auch noch ein wenig anderst machen und dir Memberfunktionen merken, anstatt normale Funktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1618080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1618080</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 21 Nov 2008 06:06:35 GMT</pubDate></item><item><title><![CDATA[Reply to suche nach Mechanismus zur Kommunikation zwischen Klassentypen. on Fri, 21 Nov 2008 19:29:15 GMT]]></title><description><![CDATA[<p>ja vielen dank das hilft weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1618546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1618546</guid><dc:creator><![CDATA[socco]]></dc:creator><pubDate>Fri, 21 Nov 2008 19:29:15 GMT</pubDate></item><item><title><![CDATA[Reply to suche nach Mechanismus zur Kommunikation zwischen Klassentypen. on Sat, 22 Nov 2008 05:03:07 GMT]]></title><description><![CDATA[<p>Zum Thema Nachrichten<br />
<a href="http://en.wikipedia.org/wiki/Callback_(computer_science)" rel="nofollow">http://en.wikipedia.org/wiki/Callback_(computer_science)</a><br />
<a href="http://en.wikipedia.org/wiki/Observer_pattern" rel="nofollow">http://en.wikipedia.org/wiki/Observer_pattern</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1618652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1618652</guid><dc:creator><![CDATA[kreise]]></dc:creator><pubDate>Sat, 22 Nov 2008 05:03:07 GMT</pubDate></item></channel></rss>