<?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[Beziehung zwischen Klassen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem damit Beziehungen zwischen Klassen zu realisieren. Habe das in der Vorlesung nicht richtig verstanden.</p>
<p>Ich habe die Klassen<br />
Auto, Scanner, Autopilot.</p>
<p>1 Auto hat einen Scanner<br />
1 Scanner ist in einem Auto eingebaut</p>
<p>1 Auto hat einen Autopiloten<br />
1 Autopilot lenkt ein Auto</p>
<p>1 Autopilot erteilt seinem Scanner einen Scanauftrag<br />
1 Scanner liefert Scanergebnis dem Autopiloten zurück</p>
<p>Bisher habe ich es so versucht:</p>
<p>In meiner Klasse Auto habe ich einen Zeiger auf ein Scanner und Autopilot<br />
also Scanner *pSc und Autopilot *pAp</p>
<p>In meinem Autopiloten habe ich einen Zeiger auf ein Auto und einen Scanner</p>
<p>Im Scanner habe ich noch nichts.</p>
<p>Ist das so korrekt, oder wie funktioniert das richtig?</p>
<p>Ich muss desweiteren auch mehrere Autos in einer Schleife ansprechen und bewegen. Die Autos werden vorher in einem Vektor gespeichert. Wie kann ich es so realisieren, dass ich nicht immer auto1.machwas, auto2.machwas, auto3.machwas aufrufen muss? Kann man einfach den Zeiger vom autopiloten auf das Auto immer auf das nächste Objekt zeigen lassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226475/beziehung-zwischen-klassen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 18:59:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226475.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Nov 2008 19:43:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Beziehung zwischen Klassen on Sat, 01 Nov 2008 19:43:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem damit Beziehungen zwischen Klassen zu realisieren. Habe das in der Vorlesung nicht richtig verstanden.</p>
<p>Ich habe die Klassen<br />
Auto, Scanner, Autopilot.</p>
<p>1 Auto hat einen Scanner<br />
1 Scanner ist in einem Auto eingebaut</p>
<p>1 Auto hat einen Autopiloten<br />
1 Autopilot lenkt ein Auto</p>
<p>1 Autopilot erteilt seinem Scanner einen Scanauftrag<br />
1 Scanner liefert Scanergebnis dem Autopiloten zurück</p>
<p>Bisher habe ich es so versucht:</p>
<p>In meiner Klasse Auto habe ich einen Zeiger auf ein Scanner und Autopilot<br />
also Scanner *pSc und Autopilot *pAp</p>
<p>In meinem Autopiloten habe ich einen Zeiger auf ein Auto und einen Scanner</p>
<p>Im Scanner habe ich noch nichts.</p>
<p>Ist das so korrekt, oder wie funktioniert das richtig?</p>
<p>Ich muss desweiteren auch mehrere Autos in einer Schleife ansprechen und bewegen. Die Autos werden vorher in einem Vektor gespeichert. Wie kann ich es so realisieren, dass ich nicht immer auto1.machwas, auto2.machwas, auto3.machwas aufrufen muss? Kann man einfach den Zeiger vom autopiloten auf das Auto immer auf das nächste Objekt zeigen lassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608724</guid><dc:creator><![CDATA[skizZ]]></dc:creator><pubDate>Sat, 01 Nov 2008 19:43:51 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehung zwischen Klassen on Sun, 02 Nov 2008 11:47:26 GMT]]></title><description><![CDATA[<p>Ich denke, dass du das grundsätzlich verstanden hast. Hat-ein ist in der Regel eine Aggregation. (Sprich die Klasse enthält ein/mehrere Instanzen des Objektes).<br />
Nun ist Design nicht immer einfach und es gibt auch nicht die &quot;wahre&quot; Lösung.<br />
Aber man könnte es in etwa so machen:</p>
<pre><code class="language-cpp">class Scanner 
{
};

class AutoPilot 
{
...
Scanner HeatScanner; //Ein AutoPilot hat immer diese Scanner zur Verfügung
Scanner MoveScanner; //Können auch mehrere sein
};

class Auto
{
...
AutoPilot* pilot; //Ein Auto kann kann einen AutoPilot haben, oder nicht
};
</code></pre>
<p>Ich habe da jetzt extra den AutoPilot als Zeiger genommen, da man da elegant den &quot;nicht-vorhanden&quot; Faktor reinbringen kann. Nämlich, wenn pilot 0 ist, dann hat das Auto keinen AutoPiloten zur Verfügung, anderseits zeigt der Zeiger auf ein gültiges Objekt. (Anstatt den Speicher dann roh zu verwalten, würde ich hier den Einsatz eines smart Pointern, wie z.B std::auto_ptr empfehlen, allenfalls auch einen aus boost).</p>
<p>Wie ich allerdings aus deiner 2 Frage entnehme, bist du noch nicht wirklich weit fortgeschritten, was den Umgang mit C++ anbelangt, da du etwas wesentliches offensichtlich noch nicht kennst. Arrays. (Obwohl du vector ansprichst.. ich bin verwirrt. ;))</p>
<pre><code class="language-cpp">Auto autos[100]; //100 Autos, die du bequem über eine Schleife verwalten kannst
</code></pre>
<p>oder mit std::vector:</p>
<pre><code class="language-cpp">std::vector&lt;Auto&gt; autos; // noch keine Elemente enthalten. Musst du zuerst hinzufügen. (oder per c-tor angeben).

std::vector&lt;Auto*&gt; autos_p; //Zeiger auf Autos, musst du auch zuerst einfügen
</code></pre>
<p>Aber auch hier wären wieder smart-Pointer angebracht und in Verbindung mit boost könntest du das relativ sauber auch mit Zeiger verwalten.<br />
(dir würde ich aber einfach mal die normale Variante, ohne Zeiger empfehlen, da bist du auf der sicheren Seite. ;))</p>
<blockquote>
<p>Kann man einfach den Zeiger vom autopiloten auf das Auto immer auf das nächste Objekt zeigen lassen?</p>
</blockquote>
<p>Und hier sprichst du eine Liste an. <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>
<pre><code class="language-cpp">std::list&lt;Auto&gt; auto_list;//ein weiterer Container aus der Standardbibliothek..
</code></pre>
<p>Kann es sein, dass du schon sehr viel gehört hast, aber noch nicht wirklich viel selber programmier hast? <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/1608903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608903</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 02 Nov 2008 11:47:26 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehung zwischen Klassen on Sun, 02 Nov 2008 13:44:46 GMT]]></title><description><![CDATA[<p>Danke schonmal für die ausführliche Antwort.</p>
<p>Natürlich kenne ich Arrays, aber wir haben uns soweit auf einen Vektor für die Speicherung der Autos geeinigt, ich kann diese natürlich auch in einem Array speichern, was ich nun auch mal gemacht habe.</p>
<p>Wo ich nun ein Problem noch habe:</p>
<p>Ich kann zwar nun nacheinander über die Schleife die Autos aufrufen und dazu bringen den Autopiloten zu benutzen, allerdings hänge ich an der Stelle dann fest, wie genau ich dem Autopiloten dann sage welches Auto er zu benutzen hat <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>
<p>Er &quot;lenkt&quot; dann immer nur das erste Auto, die anderen Autos fahren einfach nur geradeaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608937</guid><dc:creator><![CDATA[skizZ]]></dc:creator><pubDate>Sun, 02 Nov 2008 13:44:46 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehung zwischen Klassen on Sun, 02 Nov 2008 13:49:00 GMT]]></title><description><![CDATA[<p>Aso. Ja, bevorzuge ruhig vector vor normalen Arrays. War mir nur nicht sicher, ob wir auch vom gleichen sprechen.. <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>Bei deinem weiteren Problem komme ich jetzt nicht ganz draus.<br />
Du hast ja nur einen Autopiloten pro Auto. Somit &quot;weiss&quot; jedes Auto, welchen Autopiloten er hat. Der Autopilot im Gegenzug muss gar nicht wissen, von welchem Auto er genutzt wird.</p>
<p>Demonstrier dein Problem bitte mit ein wenig (möglichst relevanten) Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608938</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 02 Nov 2008 13:49:00 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehung zwischen Klassen on Sun, 02 Nov 2008 14:35:25 GMT]]></title><description><![CDATA[<p>Ok, dann lege ich doch mal los <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>
<p>Als erstes erstelle ich dynamische Autos in der Manager.cpp</p>
<pre><code class="language-cpp">FC *fc, *fc2;
</code></pre>
<p>danach überprüfe ich ob die Parzelle frei ist</p>
<pre><code>if(w.getID(Location(30,2)) != Ikon('#'))
  {
    fc = new FC(ID('A'), Location(30,2), N);
	fcs[0] = fc; 
  }
  if(w.getID(Location(20,2)) != Ikon('#'))
  {
    fc2 = new FC(ID('B'), Location(20,2), N);
	fcs[1] = fc2; 
  }
</code></pre>
<p>FC ist das Auto(FutureCar) und bekommt als Parameter den Namen, die Location(den Platz in der Welt) sowie die Richtung in die es am Anfang fährt.<br />
Desweiteren wird es in den Vektor gepusht.</p>
<p>Danach rufe ich in einer Endlosschleife</p>
<pre><code class="language-cpp">while(true)
  {
	Sleep(100);
	for(int i=0; i&lt;ManageFC.size();; i++)
	{
	  ManageFC.at(i)-&gt;go();
	}
  }
</code></pre>
<p>auf.</p>
<p>GO ist eine Methode des Autos, welche wiederum eine Methode step() aufruft.<br />
In der Methode step werden die Regeln überprüft und das Auto dann bewegt.</p>
<pre><code class="language-cpp">void FC::step()
{
pilot-&gt;cruise();
.
.
</code></pre>
<p>Wie man sieht, wird hier der Autopilot aufgerufen mit der Methode cruise();</p>
<p>cruise sieht so aus:</p>
<pre><code class="language-cpp">void Autopilot::cruise()
{
  checkForPossibleActions();
  decideAboutNextAction();
  obeyTrafficRules();
  checkNewDirForTrafficJam();
  moveFC();
}
</code></pre>
<p>Bis hierher scheint auch noch wirklich alles zu klappen. Nun wirds kritisch.</p>
<p>Ich muss in einem dynamischen Array(selbstgeschrieben) alle möglichen Fahrtmöglichkeiten speichern und dann zufällig eine davon auswählen.</p>
<pre><code class="language-cpp">void Autopilot::checkForPossibleActions()
{
  possibleActions.clear();
  if(scan.scanForID(7, fcs.getDir(), fcs.getLocation()).attribute == TRAVERSABLE)
    { possibleActions.push_back(GOAHEAD);}
.
.
</code></pre>
<p>ScanForID bekommt als Parameter (Parzelle, Autorichtung, Autolocation)<br />
possibleActions.clear() soll aufgerufen werden, falls noch irgendwas in dem dynamischen Array steht. Allerdings bricht das Programm exakt an dieser Stelle mittlerweile schon ab.</p>
<p>In der Klasse Autopilot habe ich</p>
<p>Scanner scan;<br />
FC fcs;</p>
<p>Ich hoffe, dass ich es verständlich rübergebracht habe.</p>
<p>---------------<br />
edit: dynarray.clear() und push_back klappen wieder, habe ausversehen eine Zeile auskommentiert :D.</p>
<p>Funktionieren tut es aber scheinbar mir <a href="http://fcs.xxx" rel="nofollow">fcs.xxx</a> nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608943</guid><dc:creator><![CDATA[skizZ]]></dc:creator><pubDate>Sun, 02 Nov 2008 14:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehung zwischen Klassen on Mon, 03 Nov 2008 08:40:49 GMT]]></title><description><![CDATA[<p>Hmm. Das ist jetzt so sehr schwer zu sagen, an was das es liegt.<br />
Versuch dich mal mit dem Debugger und schau, WARUM er abbricht. (Ev. bekommst du da ja auch eine Meldung dazu.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1609251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1609251</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 03 Nov 2008 08:40:49 GMT</pubDate></item></channel></rss>