<?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[new und Vererbung]]></title><description><![CDATA[<p>Guten Morgen.</p>
<p>ich sitze gerade am Speichern/Laden einer verketteten Liste.</p>
<pre><code class="language-cpp">class Elem
{
  public:
    Elem();
    ~Elem();
    // Save übernehmen das Speichern bzw. Laden
    // der Basisdaten (Prev,Next,...)
    bool Save( const char *file );
    static Elem *Load( const char *file );
    // Die virtuellen Methoden Save und Load
    // sollen die Daten abgeleiteter Klassen speichern.
    virtual bool Save( fstream &amp;f );
    virtual bool Load( fstream &amp;f );
  protected:
    Elem *m_pPrev;
    Elem *m_pNext;
}
</code></pre>
<p>Soweit sogut. Das Speichern klappt auch wunderbar. Nur beim Laden habe ich ein Problem.</p>
<pre><code class="language-cpp">/*static*/ Elem *Elem::Load( const char *file )
{
  size_t count = ...
  fstream f;

  f.open( file, ...)

  for ( size_t i = 0; i &lt; count; i++ )
  {
    // An dieser Stelle wollte ich eigendlich das jeweils abgeleitete
    // Objekt erstellen und nicht ein Basisobjekt.
    // Damit wird dann natürlich auch &quot;virtual bool Load( fstream &amp;f )&quot;
    // der Basisklasse aufgerufen.
    Elem *elem = new Elem();
    elem-&gt;Load( f );
  };
  ...
};
</code></pre>
<p>Kann man dieses Problem überhaupt ohne Templates lösen? Irgendwie stehe ich da gerade auf dem Schlauch oder stelle mich zu blöd 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="😉"
    /> Ein kleiner Denkanstoß würde mir schon reichen. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/135149/new-und-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 21:18:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/135149.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 31 Jan 2006 06:56:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to new und Vererbung on Tue, 31 Jan 2006 06:56:38 GMT]]></title><description><![CDATA[<p>Guten Morgen.</p>
<p>ich sitze gerade am Speichern/Laden einer verketteten Liste.</p>
<pre><code class="language-cpp">class Elem
{
  public:
    Elem();
    ~Elem();
    // Save übernehmen das Speichern bzw. Laden
    // der Basisdaten (Prev,Next,...)
    bool Save( const char *file );
    static Elem *Load( const char *file );
    // Die virtuellen Methoden Save und Load
    // sollen die Daten abgeleiteter Klassen speichern.
    virtual bool Save( fstream &amp;f );
    virtual bool Load( fstream &amp;f );
  protected:
    Elem *m_pPrev;
    Elem *m_pNext;
}
</code></pre>
<p>Soweit sogut. Das Speichern klappt auch wunderbar. Nur beim Laden habe ich ein Problem.</p>
<pre><code class="language-cpp">/*static*/ Elem *Elem::Load( const char *file )
{
  size_t count = ...
  fstream f;

  f.open( file, ...)

  for ( size_t i = 0; i &lt; count; i++ )
  {
    // An dieser Stelle wollte ich eigendlich das jeweils abgeleitete
    // Objekt erstellen und nicht ein Basisobjekt.
    // Damit wird dann natürlich auch &quot;virtual bool Load( fstream &amp;f )&quot;
    // der Basisklasse aufgerufen.
    Elem *elem = new Elem();
    elem-&gt;Load( f );
  };
  ...
};
</code></pre>
<p>Kann man dieses Problem überhaupt ohne Templates lösen? Irgendwie stehe ich da gerade auf dem Schlauch oder stelle mich zu blöd 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="😉"
    /> Ein kleiner Denkanstoß würde mir schon reichen. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/981704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/981704</guid><dc:creator><![CDATA[MartinSchulz]]></dc:creator><pubDate>Tue, 31 Jan 2006 06:56:38 GMT</pubDate></item><item><title><![CDATA[Reply to new und Vererbung on Tue, 31 Jan 2006 07:04:59 GMT]]></title><description><![CDATA[<p>In der Definition der abgeleiteten Klassen überschreibst du die Load()-Fkt. und kannst innerhalb dieser Überschreibung ggf. die Load()-Fkt. der Basisklasse aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/981706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/981706</guid><dc:creator><![CDATA[don_basto]]></dc:creator><pubDate>Tue, 31 Jan 2006 07:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to new und Vererbung on Tue, 31 Jan 2006 11:17:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Elem *elem = new Elem(); 
elem-&gt;Load( f );
</code></pre>
<p>du lädst die daten in ein neu erzeugtes objekt. was du willst, ist this-&gt;Load(f).</p>
<p>aber eigentlich ist deine konstruktion mit zwei Load() und Save()-funktionen nicht sehr sinnvoll. besser, du definierst nur eine Load() und eine Save()-funktion und schreibst in der Load()-funktion der abgeleiteten klasse am anfang this-&gt;Elm::Load(), um auch die daten der parent-klasse zu laden (analog für Save()). die Load() und Save()-funktionen müssen dazu nicht unbedingt virtuell sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/981868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/981868</guid><dc:creator><![CDATA[Konfusius]]></dc:creator><pubDate>Tue, 31 Jan 2006 11:17:45 GMT</pubDate></item></channel></rss>