<?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[Dynamisches Array und OOP ( es wird die Funktion des Parents aufgerufen)]]></title><description><![CDATA[<p>Hi an Alle.<br />
Ich habe da ein kleines Problem der Vererbung einer Methode.<br />
Ich habe zwei Klassen:</p>
<pre><code class="language-cpp">class TObject
{
  public:
  virtual double calc_intersection(TRay ray) {
    return -1;
  } 
};
</code></pre>
<p>und</p>
<pre><code class="language-cpp">class TKugel : public TObject
{
  public:
  TVec3d position;
  double radius;
  double calc_intersection(TRay ray);  
};
</code></pre>
<p>Also eigentlich eine Einfache Vererbung.</p>
<p>nun möchte ich ein Array aus verschiedenen TObjects bauen, in welches ich natürlich Kugeln, oder Ebenen oder andere von TObject abgeleitete Klassen hinein stecke. Mein Versuch dazu sah folgendermaßen aus:</p>
<pre><code class="language-cpp">void TRaytracer::addObj( TObject obj) {

  static int length = this-&gt;obj_arr_length;
  TObject* newobjarr;
  newobjarr = new TObject[length+1];

  for ( int i = 0; i &lt; length; i++)
  {
    newobjarr[i]= this-&gt;objArray[i];
  }
  newobjarr[ length ] = obj;

  delete [] this-&gt;objArray;
  this-&gt;objArray = newobjarr;
  this-&gt; obj_arr_length++;
  //std::cout &lt;&lt; this-&gt;obj_arr_length;
};
</code></pre>
<p>rufe ich jetzt aber auf jedem Object in diesem Array die calc_intersection Methode auf, so wird immer die vom Parent, also TObject aufgerufen. Ich nehme an, es stimmt irgendetwas nicht mit dem Array. Da ich allerdings noch nicht allzu lange c++ programmiere, weiß ich nicht genau, was er hinter den Kulissen macht.</p>
<p>wäre für Lösungen und Erklärungen jeglicher Art dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287138/dynamisches-array-und-oop-es-wird-die-funktion-des-parents-aufgerufen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 14:40:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287138.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 May 2011 16:57:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamisches Array und OOP ( es wird die Funktion des Parents aufgerufen) on Mon, 23 May 2011 16:57:01 GMT]]></title><description><![CDATA[<p>Hi an Alle.<br />
Ich habe da ein kleines Problem der Vererbung einer Methode.<br />
Ich habe zwei Klassen:</p>
<pre><code class="language-cpp">class TObject
{
  public:
  virtual double calc_intersection(TRay ray) {
    return -1;
  } 
};
</code></pre>
<p>und</p>
<pre><code class="language-cpp">class TKugel : public TObject
{
  public:
  TVec3d position;
  double radius;
  double calc_intersection(TRay ray);  
};
</code></pre>
<p>Also eigentlich eine Einfache Vererbung.</p>
<p>nun möchte ich ein Array aus verschiedenen TObjects bauen, in welches ich natürlich Kugeln, oder Ebenen oder andere von TObject abgeleitete Klassen hinein stecke. Mein Versuch dazu sah folgendermaßen aus:</p>
<pre><code class="language-cpp">void TRaytracer::addObj( TObject obj) {

  static int length = this-&gt;obj_arr_length;
  TObject* newobjarr;
  newobjarr = new TObject[length+1];

  for ( int i = 0; i &lt; length; i++)
  {
    newobjarr[i]= this-&gt;objArray[i];
  }
  newobjarr[ length ] = obj;

  delete [] this-&gt;objArray;
  this-&gt;objArray = newobjarr;
  this-&gt; obj_arr_length++;
  //std::cout &lt;&lt; this-&gt;obj_arr_length;
};
</code></pre>
<p>rufe ich jetzt aber auf jedem Object in diesem Array die calc_intersection Methode auf, so wird immer die vom Parent, also TObject aufgerufen. Ich nehme an, es stimmt irgendetwas nicht mit dem Array. Da ich allerdings noch nicht allzu lange c++ programmiere, weiß ich nicht genau, was er hinter den Kulissen macht.</p>
<p>wäre für Lösungen und Erklärungen jeglicher Art dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067520</guid><dc:creator><![CDATA[Namenlooser]]></dc:creator><pubDate>Mon, 23 May 2011 16:57:01 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array und OOP ( es wird die Funktion des Parents aufgerufen) on Mon, 23 May 2011 17:04:07 GMT]]></title><description><![CDATA[<p>Na logisch wir die Methode von <code>TObject</code> aufgerufen, da es sich um <code>TObject</code> s handelt...</p>
<p>EDIT: Wieso überlässt du die Speicherverwaltung nicht einem <code>std::vector</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067522</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Mon, 23 May 2011 17:04:07 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array und OOP ( es wird die Funktion des Parents aufgerufen) on Mon, 23 May 2011 17:14:52 GMT]]></title><description><![CDATA[<p>Da bin ich mir eben nicht sicher. Ich gebe ja einen Zeiger auf eine Kugel in die Funktion addObj.</p>
<pre><code class="language-cpp">TKugel kugel;
  kugel.position.setvec(0,0,5);
  kugel.radius  =1;
  //..
  ..///
  tracer.addObj(kugel);
</code></pre>
<p>in der Methode wird das Array um eins verlängert und die Kugel an die letzte Stelle gepackt.</p>
<p>und den Vector Datentyp werde ich mir mal ansehen. Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067524</guid><dc:creator><![CDATA[Namenlooser]]></dc:creator><pubDate>Mon, 23 May 2011 17:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array und OOP ( es wird die Funktion des Parents aufgerufen) on Mon, 23 May 2011 17:15:55 GMT]]></title><description><![CDATA[<p>Polymorphie funktioniert nur, wenn du Verweise (Zeiger oder Referenzen) auf die abgeleitete Klasse aufhebst - in deiner Methode AddObj kopierst du das übergebene Objekt<sup>*</sup>, dabei gehen alle Anteile von TKugel, TEbene etc verloren.<br />
Du solltest die Objekte am besten in einem vector&lt;TObjekt *&gt; (oder ptrvector) unterbringen und dann immer nur den Zeiger auf das anfangs erzeugte Objekt verwenden.</p>
<p><sup>*</sup> genau genommen bekommst du sogar ein nacktes TObjekt in die Funktion, weil du clevererweise den Parameter per Wert entgegennimmst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067527</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 23 May 2011 17:15:55 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array und OOP ( es wird die Funktion des Parents aufgerufen) on Mon, 23 May 2011 17:23:47 GMT]]></title><description><![CDATA[<p>Mhm. ich hatte angenommen, dass wenn ich ein Object als Parameter in eine Function schmeiße, sowieso nur der Pointer auf das Objekt übergeben wird.<br />
Naja. Aber vector scheint genau das zu sein, wonach ich suche. Dann erspare ich mir die Speicherverwaltung. Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067532</guid><dc:creator><![CDATA[Namenlooser]]></dc:creator><pubDate>Mon, 23 May 2011 17:23:47 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array und OOP ( es wird die Funktion des Parents aufgerufen) on Mon, 23 May 2011 17:26:22 GMT]]></title><description><![CDATA[<p>Du bist nicht zufällig von Java oder C# nach C++ gekommen? Wenn ja, gewöhn dich besser daran, daß du hier nur dann Pointer bekommst, wenn du explizit danach verlangst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067533</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 23 May 2011 17:26:22 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array und OOP ( es wird die Funktion des Parents aufgerufen) on Mon, 23 May 2011 17:32:29 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Du bist nicht zufällig von Java oder C# nach C++ gekommen? Wenn ja, gewöhn dich besser daran, daß du hier nur dann Pointer bekommst, wenn du explizit danach verlangst.</p>
</blockquote>
<p>Fast. Hab bisher immer Object-Pascal Programmiert. Will aber auf c++ umsteigen, da ich jetzt auf meinem Linux Rechner programmieren will.<br />
Ich weiß, es gibt vorbehalte gegen die Borland Delphi IDE, aber eigentlich fand ich es gar nicht so schlecht von Delphi immer gleich ein Fenster zu bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067534</guid><dc:creator><![CDATA[Namenlooser]]></dc:creator><pubDate>Mon, 23 May 2011 17:32:29 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array und OOP ( es wird die Funktion des Parents aufgerufen) on Mon, 23 May 2011 17:56:30 GMT]]></title><description><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Object_Pascal" rel="nofollow">Objekt Pascal</a> ist nicht gleich Objekt Pascal. Ich bin mit dem alten Turbo Pascal mit OOP-Erweiterung groß geworden. Da musste man noch Zeiger explizit definieren und New/Dispose als Procedur-Aufrufe verwenden. In Delphi scheint das anders zu sein. Da ist eine Variable eines Klassen-Typs implizit nur ein Zeiger. Genauso sind in Sprachen wie Java und C# Variablen von Klassen-Typen nur Referenzen. In C++ gibt es diese aufgezwungene Indirektion nicht. Vorteil: Mehr Regularität und Objekte können auf dem Stack angelegt werden. Das ist so ziemlich das wichtigste, was Du erstmal verstehen solltest. Am besten besorgst Du Dir ein schlaues C++ Buch und parkst Dein Delphi-Wissen im Keller. Das dürfte eher hinderlich beim C++ Lernen sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067539</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 23 May 2011 17:56:30 GMT</pubDate></item></channel></rss>