<?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[vector&amp;lt;Klassentyp&amp;gt;]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Damit der andere Thread nicht unnötig groß wird, mache ich mal nen neuen auf.</p>
<p>Erst mal ein paar Code-Schnipsel:</p>
<pre><code class="language-cpp">// c_ship.hpp
class c_ship
{
  private:
  int m_agility;

  public:
  // set/get Funktionen
  c_ship(string s_type);
}
</code></pre>
<pre><code class="language-cpp">// c_ship.cpp
c_ship::// set/get

c_ship::c_ship(string s_type)
{
  if(s_type == &quot;Kreuzer&quot;) // Es gibt verschiedene Schiffe. 
  {
     m_agility = 100; // nur ein Beispiel
  }      

   // Waffe hinzufügen --&gt; Hier ist das Problem
   vector&lt;c_weapon&gt; weapon(2);
}
</code></pre>
<pre><code class="language-cpp">// c_weapon.hpp
class c_weapon
{
   private:
   int i_damage;

   public:

   c_weapon(string s_type);
}
</code></pre>
<pre><code class="language-cpp">// c_weapon.cpp

// set/get Funktionen
c_weapon::c_weapon(string s_type)
{
   // s_type repräsentiert den Waffentyp
   if(s_type == &quot;Laser&quot;)
   {
      i_damage = 150;
   }
   // ...
}
</code></pre>
<p>Wie man an dem Codeteil sieht, möchte ich in der ship.cpp innerhalb des Konstruktors einen vector der Klasse c_weapon erstellen. Das erstellen ist ja auch kein Problem. Aber wie kann ich da jetzt auf die Memberfunktionen der Klasse c_weapon zugreifen und dem Konstruktor den Typ (s_type) der Waffe übergeben? vector&lt;c_weapon&gt; weapon(&quot;Kreuzer&quot;); Ich dachte, dass es so funktionieren müsste, das tut es aber nicht. Und wenn ich &quot;weapon.&quot; eingebe, dann greife ich ja nur auf die Funktionen des vectors zu, z.B. push_back(), aber nicht auf die Memberfunktionen der Klasse c_weapon.</p>
<p>Ich hatte hier ein wenig gesucht, aber nicht wirklich was gefunden.</p>
<p>Kann es sein, dass ich einen groben Fehler gemacht habe oder weiß ich einfach nur nicht wie ich das machen muss? <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ß Spartaner</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/172830/vector-lt-klassentyp-gt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 01:59:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/172830.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Feb 2007 19:02:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector&amp;lt;Klassentyp&amp;gt; on Thu, 08 Feb 2007 19:02:52 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Damit der andere Thread nicht unnötig groß wird, mache ich mal nen neuen auf.</p>
<p>Erst mal ein paar Code-Schnipsel:</p>
<pre><code class="language-cpp">// c_ship.hpp
class c_ship
{
  private:
  int m_agility;

  public:
  // set/get Funktionen
  c_ship(string s_type);
}
</code></pre>
<pre><code class="language-cpp">// c_ship.cpp
c_ship::// set/get

c_ship::c_ship(string s_type)
{
  if(s_type == &quot;Kreuzer&quot;) // Es gibt verschiedene Schiffe. 
  {
     m_agility = 100; // nur ein Beispiel
  }      

   // Waffe hinzufügen --&gt; Hier ist das Problem
   vector&lt;c_weapon&gt; weapon(2);
}
</code></pre>
<pre><code class="language-cpp">// c_weapon.hpp
class c_weapon
{
   private:
   int i_damage;

   public:

   c_weapon(string s_type);
}
</code></pre>
<pre><code class="language-cpp">// c_weapon.cpp

// set/get Funktionen
c_weapon::c_weapon(string s_type)
{
   // s_type repräsentiert den Waffentyp
   if(s_type == &quot;Laser&quot;)
   {
      i_damage = 150;
   }
   // ...
}
</code></pre>
<p>Wie man an dem Codeteil sieht, möchte ich in der ship.cpp innerhalb des Konstruktors einen vector der Klasse c_weapon erstellen. Das erstellen ist ja auch kein Problem. Aber wie kann ich da jetzt auf die Memberfunktionen der Klasse c_weapon zugreifen und dem Konstruktor den Typ (s_type) der Waffe übergeben? vector&lt;c_weapon&gt; weapon(&quot;Kreuzer&quot;); Ich dachte, dass es so funktionieren müsste, das tut es aber nicht. Und wenn ich &quot;weapon.&quot; eingebe, dann greife ich ja nur auf die Funktionen des vectors zu, z.B. push_back(), aber nicht auf die Memberfunktionen der Klasse c_weapon.</p>
<p>Ich hatte hier ein wenig gesucht, aber nicht wirklich was gefunden.</p>
<p>Kann es sein, dass ich einen groben Fehler gemacht habe oder weiß ich einfach nur nicht wie ich das machen muss? <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ß Spartaner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1225268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225268</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Thu, 08 Feb 2007 19:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;Klassentyp&amp;gt; on Thu, 08 Feb 2007 19:20:06 GMT]]></title><description><![CDATA[<p>wenn ein Schiff waffen besitzen soll, so muss es einen vector&lt;waffe_base*&gt; als membervariable haben, damit die polymorphie von den waffen greifen kann (hab den andern thread ein bischen gelesen).<br />
also:</p>
<pre><code class="language-cpp">class cShip
{
//...
std::vector&lt;cWeaponBase*&gt; m_Waepons;
// ...
};

cShip::cShip()
{
 // ...
 // vector mit den waffen füllen
 if(type == &quot;laserschiff&quot;)
 {
    m_Weapons.push_back(new cLaserStrahl);
    m_Weapons.push_back(new cLaserStrahl);
// schiff hat 2 laser und eine plasmakanone
    m_Weapons.push_back(new cPlasmaKanone);
 }
}
</code></pre>
<p>hoffe konnt ein bisschen helfen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1225281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225281</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Thu, 08 Feb 2007 19:20:06 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;Klassentyp&amp;gt; on Thu, 08 Feb 2007 20:12:48 GMT]]></title><description><![CDATA[<p>Zunächst mal Danke für deine Antwort! Das werde ich direkt mal ausprobieren. In der Zwischenzeit bin ich allerdings selber auf eine Möglichkeit gekommen, mit der ich das gewünschte Ergebnis erziele:</p>
<pre><code class="language-cpp">class c_ship
{
   public:
   std::vector&lt;c_weapon&gt; v_weapon;

   c_ship::c_ship(/*schiffstyp*/)
   {
      c_weapon weapon1(/*waffentyp*/);

      v_weapon.push_back(weapon1);
   }

}

// main.cpp

c_ship ship(/*schiffstyp*/);
ship.v_weapon[0].get_typeofwpon();  
// get_typeofwpon ist eine der Memberfunktionen der Klasse c_weapon
</code></pre>
<p>Was natürlich direkt auffällt, ist dass ich den vector public habe. An der set/get-Funktion bin ich gescheitert. Macht es überhaupt noch Sinn, hierfür eine set/get Funktion zu schreiben oder kann man dies hierbei belassen?</p>
<p>Und was ist jetzt besser an der Variante von Maxi (ja, ich gehe einfach mal davon aus, dass sie besser ist <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="😉"
    /> ). Vorweg muss ich direkt nochmal sagen, dass ich mich noch nicht wieder in den Themenbereich Zeiger und Speicherverwaltung eingearbeitet habe. Dies wollte ich machen, wenn ich es für mein Projekt benötige.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1225320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225320</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Thu, 08 Feb 2007 20:12:48 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;Klassentyp&amp;gt; on Thu, 08 Feb 2007 21:51:30 GMT]]></title><description><![CDATA[<p>das problem an deiner methode ist, dass du in deinen Vektor nur waffen eines bestimmten Typs hauen kannst. d.h. du kannst zB dein LAserschiff nicht mit einem raketenwerfer aufrüsten. ich geh jetz ma davon aus, dass jede waffe eine eigene klasse hat. mit miener methode hast du eben einen zieger auf deine waffe, welche genau das is brauchst du ja ncih zu wissen, du sagst nur Waffe, los schiess und die waffe weiß selber wie sie zu schiessen hat.<br />
Ich würde sagen es wird zeut dich in einen neuen themenbreich einzuarbeiten <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="🙂"
    /><br />
btw.: get/set-methoden für die waffen... hm.. vielleicht eine AddWepaon()<br />
aber getmethoden... weiß nich. Kann hilfreich sein, muss aber nich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1225369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225369</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Thu, 08 Feb 2007 21:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;Klassentyp&amp;gt; on Fri, 09 Feb 2007 10:18:27 GMT]]></title><description><![CDATA[<p>Maxi schrieb:</p>
<blockquote>
<p>das problem an deiner methode ist, dass du in deinen Vektor nur waffen eines bestimmten Typs hauen kannst. d.h. du kannst zB dein LAserschiff nicht mit einem raketenwerfer aufrüsten. ich geh jetz ma davon aus, dass jede waffe eine eigene klasse hat.</p>
</blockquote>
<p>Nein, ich habe für die Waffen nur eine Klasse. Der einzige Unterschied zwischen den Waffen sind nur die jeweiligen Werte (Genauigkeit, Schaden, Wirkung auf Panzerung, Wirkung auf Schilde usw...) Der Laser hat z.B. einen GrundSchaden von 100 , der Rak-Werfer nur von 50 usw...<br />
Somit brauche ich ja nur einen vector der Klasse c_weapon. Um den Typ der Waffe zu definieren, übergebe ich dem Konstruktor der Klasse c_weapon einen string mit dem Typ der Waffe. Sollte z.b. ein Schiff 2 Laser haben, so muss ich dafür auch nicht 2 Instanzen anlegen, da ich in der Klasse c_weapon eine Membervariable deklariert habe, die die Anzahl der jeweiligen Waffe beinhaltet. Bei der Berechnung des Schadens wird dieser dann einfach mit der Anzahl der Waffen multipliziert, somit habe ich mir eine weitere Instanz der Klasse gespart.</p>
<p>Maxi schrieb:</p>
<blockquote>
<p>Ich würde sagen es wird zeut dich in einen neuen themenbreich einzuarbeiten</p>
</blockquote>
<p>Neu ist der Themenbereich ja nicht für mich, ist nur sehr sehr lange her, wo ich damit gearbeit habe, deswegen weiß ich nicht mehr so genau darüber bescheid. Aber ich bin schon dabei es zu Wiederholen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Maxi schrieb:</p>
<blockquote>
<p>btw.: get/set-methoden für die waffen... hm.. vielleicht eine AddWepaon()<br />
aber getmethoden... weiß nich. Kann hilfreich sein, muss aber nich</p>
</blockquote>
<p>AddWeapon() benötige ich eigentlich nicht, da die Zuweisung der Waffen ja im Konstruktor der Schiffsklasse geschieht. Und nachträglich werden keine Waffen hinzugefügt. Dort werden je nachdem welcher Typ an den Konstruktor übergeben wurde, die verschiedenen Schiffe mit ihren Waffen (vector&lt;c_weapon&gt;) erstellt.<br />
get-methoden brauche ich, wenn es nicht auch anders geht, um meine Schadensberechnung und -zuweisung vorzunehmen. In der weapon-Klasse wird noch die Funktion zur Schadensberechnung eingefügt. Dieser Funktion muss ich die Werte des Gegnerischen Schiffes übergeben (Hülle, Panzerung, Schild usw..., halt alles was zur Berechnung des Schadens benötigt wird) Ist der Schaden dann ermittelt, muss die Funktion den Wert zurückliefern, damit ich diesen dann von dem Hüllenwert des Gegnerischen Schiffes subtrahieren kann.</p>
<p>Außerdem wollte ich die get-methoden eigentlich dafür haben, damit ich die Werte der Schiffe ausgeben kann. Auf die Schiffswerte kann ich ja ohne Probleme zugreifen, auf die Waffenwerte auch (so wie ich es momentan gemacht habe)<br />
Deklariere ich den vector v_weapon allerdings private, so müsste ich dafür ja wieder eine set/get-methode definieren, mit der ich wiederum auf die set/get-methoden der Klasse c_weapon zugreifen kann. Ich denke dass dies unnötger aufwand wäre. Auf die Membervariablen kann ich ja eh nicht direkt zugreifen, dafür habe ich ja die Funktionen der c_weapon Klasse. Also ist es doch eigentlich überflüssig für diese nochmals eine Zugriffsfunktion in der Schiffsklasse zu definieren!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1225553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225553</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Fri, 09 Feb 2007 10:18:27 GMT</pubDate></item></channel></rss>