<?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[Klasse, Vererbung, static, etc....]]></title><description><![CDATA[<p>Hallo Leute,<br />
Habe folgenden Code:</p>
<pre><code class="language-cpp">/*Kontoverwaltungsprogramm*/
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

class Konto
{
protected:
   float kontostand;
public:
   Konto()
   {
      kontostand=0;
   };
   void einzahlen(float einzahlung)
   {
      kontostand+=einzahlung;
   };
   virtual bool darfAuszahlen(float betrag)=0;
   void auszahlen(float auszahlung)
   {
      if(darfAuszahlen(auszahlung))
         kontostand-=auszahlung;
      else
         cout&lt;&lt;&quot;Auszahlung nicht moeglich!\n&quot;;
   };
   virtual void anzeigen()
   {
      cout&lt;&lt;&quot;Kontostand: &quot;&lt;&lt;kontostand&lt;&lt;endl;
   };
   virtual void jahresabschluss()=0;
};
class Girokonto:public Konto
{
private:
   float ueberziehungsrahmen;
public:
   Girokonto()
   {
      ueberziehungsrahmen=1000;
   };
   bool darfAuszahlen(float betrag)//virtual in Konto
   {
      return betrag&lt;=kontostand+ueberziehungsrahmen;
   };
   void anzeigen()//virtual in Konto
   {
      Konto::anzeigen();
      cout&lt;&lt;&quot;Ueberziehungsrahmen: &quot;&lt;&lt;ueberziehungsrahmen&lt;&lt;endl;
   };
   void jahresabschluss()
   {
      kontostand-=30;
   };
};
class Sparkonto:public Konto
{
private:
    float zinssatz;
public:
   Sparkonto()
   {
      static float zinssatz=0.1;
   };
   void anzeigen()//virtual in Konto
   {
      Konto::anzeigen();
      cout&lt;&lt;&quot;Zinssatz: &quot;&lt;&lt;zinssatz*100&lt;&lt;endl;
   };
   bool darfAuszahlen(float betrag)//virtual in Konto
   {
      return betrag&lt;=kontostand;
   };
   void jahresabschluss()
   {
      kontostand+=kontostand*zinssatz;;
   };
};
void inhaberUndKontoAnzeigen(string inhaber,Konto *pKto)
{
   cout&lt;&lt;&quot;Inhaber: &quot;&lt;&lt;inhaber&lt;&lt;endl;
   pKto-&gt;anzeigen();
   cout&lt;&lt;endl;
};
int main()
{
   cout&lt;&lt;&quot;Willkommen bei der GELD-Bank!&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;Ihr Girokonto:&quot;&lt;&lt;endl;
   Girokonto g;
   //g.inhaberUndKontoAnzeigen(Karl,);
   g.einzahlen(10);                               //Kontostand +10
   g.jahresabschluss();                           //Jahresabschluss: -30 Kontostand: -20
   g.auszahlen(1500);                             //eine Auszahlung von 1500 würde den Ueberziehungsrahmen sprengen
   g.auszahlen(100);                              //100 dagegen sind machbar Kontostand: -120
   g.anzeigen();

   cout&lt;&lt;&quot;\nIhr Sparkonto:&quot;&lt;&lt;endl;
   Sparkonto s;
   s.einzahlen(100);
   s.jahresabschluss();
   s.auszahlen(1500);
   s.auszahlen(100);
   s.anzeigen();
   system(&quot;pause&quot;);
   return 0;
};
</code></pre>
<p>Ich habe folgende Fragen an euch:<br />
Woran liegt es, dass das Programm den Zinssatz &quot;komisch&quot; benutzt? Ich befürchte es liegt an dem static.<br />
Dann habe ich mal eine weitere Frage und zwar wie kann ich die Konten in einem Array verwalten?<br />
Außerdem möchte ich den Zinssatz, den ich für das normale Sparkonto nutze auch fürs Girokonto nutzen. Habe den Tip bekommen, dass ich die Variable von Konto verdecke also ein Attribut überschreibe.</p>
<p>Muss dazu sagen bin ziemlich neu in C++. Wäre für viele Tipps und Verbessrungsvorschläge dankbar!</p>
<p>twens</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/258756/klasse-vererbung-static-etc</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 03:13:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258756.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Jan 2010 18:40:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse, Vererbung, static, etc.... on Thu, 14 Jan 2010 18:40:00 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
Habe folgenden Code:</p>
<pre><code class="language-cpp">/*Kontoverwaltungsprogramm*/
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

class Konto
{
protected:
   float kontostand;
public:
   Konto()
   {
      kontostand=0;
   };
   void einzahlen(float einzahlung)
   {
      kontostand+=einzahlung;
   };
   virtual bool darfAuszahlen(float betrag)=0;
   void auszahlen(float auszahlung)
   {
      if(darfAuszahlen(auszahlung))
         kontostand-=auszahlung;
      else
         cout&lt;&lt;&quot;Auszahlung nicht moeglich!\n&quot;;
   };
   virtual void anzeigen()
   {
      cout&lt;&lt;&quot;Kontostand: &quot;&lt;&lt;kontostand&lt;&lt;endl;
   };
   virtual void jahresabschluss()=0;
};
class Girokonto:public Konto
{
private:
   float ueberziehungsrahmen;
public:
   Girokonto()
   {
      ueberziehungsrahmen=1000;
   };
   bool darfAuszahlen(float betrag)//virtual in Konto
   {
      return betrag&lt;=kontostand+ueberziehungsrahmen;
   };
   void anzeigen()//virtual in Konto
   {
      Konto::anzeigen();
      cout&lt;&lt;&quot;Ueberziehungsrahmen: &quot;&lt;&lt;ueberziehungsrahmen&lt;&lt;endl;
   };
   void jahresabschluss()
   {
      kontostand-=30;
   };
};
class Sparkonto:public Konto
{
private:
    float zinssatz;
public:
   Sparkonto()
   {
      static float zinssatz=0.1;
   };
   void anzeigen()//virtual in Konto
   {
      Konto::anzeigen();
      cout&lt;&lt;&quot;Zinssatz: &quot;&lt;&lt;zinssatz*100&lt;&lt;endl;
   };
   bool darfAuszahlen(float betrag)//virtual in Konto
   {
      return betrag&lt;=kontostand;
   };
   void jahresabschluss()
   {
      kontostand+=kontostand*zinssatz;;
   };
};
void inhaberUndKontoAnzeigen(string inhaber,Konto *pKto)
{
   cout&lt;&lt;&quot;Inhaber: &quot;&lt;&lt;inhaber&lt;&lt;endl;
   pKto-&gt;anzeigen();
   cout&lt;&lt;endl;
};
int main()
{
   cout&lt;&lt;&quot;Willkommen bei der GELD-Bank!&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;Ihr Girokonto:&quot;&lt;&lt;endl;
   Girokonto g;
   //g.inhaberUndKontoAnzeigen(Karl,);
   g.einzahlen(10);                               //Kontostand +10
   g.jahresabschluss();                           //Jahresabschluss: -30 Kontostand: -20
   g.auszahlen(1500);                             //eine Auszahlung von 1500 würde den Ueberziehungsrahmen sprengen
   g.auszahlen(100);                              //100 dagegen sind machbar Kontostand: -120
   g.anzeigen();

   cout&lt;&lt;&quot;\nIhr Sparkonto:&quot;&lt;&lt;endl;
   Sparkonto s;
   s.einzahlen(100);
   s.jahresabschluss();
   s.auszahlen(1500);
   s.auszahlen(100);
   s.anzeigen();
   system(&quot;pause&quot;);
   return 0;
};
</code></pre>
<p>Ich habe folgende Fragen an euch:<br />
Woran liegt es, dass das Programm den Zinssatz &quot;komisch&quot; benutzt? Ich befürchte es liegt an dem static.<br />
Dann habe ich mal eine weitere Frage und zwar wie kann ich die Konten in einem Array verwalten?<br />
Außerdem möchte ich den Zinssatz, den ich für das normale Sparkonto nutze auch fürs Girokonto nutzen. Habe den Tip bekommen, dass ich die Variable von Konto verdecke also ein Attribut überschreibe.</p>
<p>Muss dazu sagen bin ziemlich neu in C++. Wäre für viele Tipps und Verbessrungsvorschläge dankbar!</p>
<p>twens</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838977</guid><dc:creator><![CDATA[twens]]></dc:creator><pubDate>Thu, 14 Jan 2010 18:40:00 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Vererbung, static, etc.... on Thu, 14 Jan 2010 20:09:52 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">float zinssatz;
public:
   Sparkonto()
   {
      static float zinssatz=0.1;
   };
</code></pre>
<p>Das macht so keinen Sinn, da du jetzt 2 verschiedene Variablen angelegt hast (trotz gleichen Namens, nur daß die 2. in dem Konstruktor nur temporär existiert) und daher kriegst du auch komische Werte, da die Membervariable uninitialisert bleibt.</p>
<p>Richtig wär also:</p>
<pre><code class="language-cpp">float zinssatz;
public:
   Sparkonto()
   {
      zinssatz=0.1;
   };
</code></pre>
<p>Wenn dein Zinsatz jedoch konstant und dann noch gleich für alle Sparkonten sein soll, dann brauchst du eine statische, konstante Membervariable.</p>
<pre><code class="language-cpp">class Sparkonto
{
private:
  static const float zinssatz;
public:
  // ..
}
</code></pre>
<p>Die Initialisierung davon mußt du dann außerhalb der Klasse machen (bei sauberer Trennung von Header und Sourcedatei eigentlich nur in der Sourcedatei - die sogenannte One-Definition-Rule (ODR)):</p>
<pre><code class="language-cpp">float Sparkonto::zinssatz = 0.1; // static hier nicht mehr angeben!!!
</code></pre>
<p>Wenn du den gleichen Zinssatz für beide Kontenklassen haben willst (real sind die aber ja gerade unterschiedlich), dann könntest du einfach diese Variable in die Basisklasse Konto packen (dann als 'protected', damit die abgeleiteten Klassen darauf zugreifen können).</p>
<p>Und um ein Array von Konten anzulegen, benutze am besten die Klasse std::vector:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

std::vector&lt;Sparkonto&gt; sparkonten;

Sparkonto s;
s.einzahlen(42);

sparkonten.push_back(s);
</code></pre>
<p>Diese Klasse schau dir am besten mal in einem Tutorial oder in deinem Lernbuch an-)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839014</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Thu, 14 Jan 2010 20:09:52 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Vererbung, static, etc.... on Fri, 15 Jan 2010 19:21:29 GMT]]></title><description><![CDATA[<p>1Hallo,<br />
hab gerade diese Eintrag gesehn. Hab noch nicht so den Plan von C++. Wollte mir dieses Programm aber mal ansehn.<br />
Im main-menü gibt es das</p>
<pre><code class="language-cpp">//g.inhaberUndKontoAnzeigen(Karl,);
</code></pre>
<p>Und darüber</p>
<pre><code class="language-cpp">void inhaberUndKontoAnzeigen(string inhaber,Konto *pKto)
{
   cout&lt;&lt;&quot;Inhaber: &quot;&lt;&lt;inhaber&lt;&lt;endl;
   pKto-&gt;anzeigen();
   cout&lt;&lt;endl;
};
</code></pre>
<p>Wie genau benutz ich das denn, dass es funktioniert? Also welche Attribute setz ich ein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839484</guid><dc:creator><![CDATA[AAUUDDIIOO]]></dc:creator><pubDate>Fri, 15 Jan 2010 19:21:29 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Vererbung, static, etc.... on Sat, 16 Jan 2010 12:12:33 GMT]]></title><description><![CDATA[<p>Das diese als freie Funktion implementiert wurde, mußt du sie so aufrufen:</p>
<pre><code class="language-cpp">Girokonto g;
inhaberUndKontoAnzeigen(&quot;Karl&quot;, &amp;g);
</code></pre>
<p>Wobei ich persönlich eher eine &quot;const-reference&quot; als Übergabeparameter bei der Definition benutzt hätte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839708</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 16 Jan 2010 12:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Vererbung, static, etc.... on Sat, 16 Jan 2010 12:53:59 GMT]]></title><description><![CDATA[<p>Eine Konstante Referenz würde sich bei diesem Call eher anbieten, das ist intuitiver.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839728</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Sat, 16 Jan 2010 12:53:59 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Vererbung, static, etc.... on Sat, 16 Jan 2010 14:26:35 GMT]]></title><description><![CDATA[<p>So Leute,<br />
hab mir die Tipps von Th69 mal angeguckt hab aber noch leichte Probleme bei der Umsetzung. Bezogen auf den Zinssatz hatte ich schon vor den mit static festzulegen. Hab folgendes gemacht:<br />
In der Klasse:</p>
<pre><code class="language-cpp">class Sparkonto:public Konto
{
private:
    //float zinssatz;
    static const float zinssatz;
public:
   /*Sparkonto()
   {
      static float zinssatz=0.1;
   };*/
</code></pre>
<p>Hab die Sachen die ich meiner Meinung nach nicht mehr benötige als Kommentar erstmal gelassen.<br />
Im main Programm hab ich folgendes:</p>
<pre><code class="language-cpp">int main()
{
   float Sparkonto::zinssatz = 0.1
</code></pre>
<p>Bekomm jetzt aber vom Compiler:<br />
In function <code>int main()': error: conflicting declaration 'float Sparkonto::zinssatz' error: 'Sparkonto::zinssatz' has a previous declaration as</code>const float Sparkonto::zinssatz'<br />
So bin jetzt etwas irritiert, weil ich doch irgendwie den Zinssatz festlegen muss.</p>
<p>Dann bin ich noch unsicher in dem Umgang mit dem Array:<br />
Und zwar wird mir nicht ganz klar, wie ich mit dem von Th69 geposteten Array die Konten verwalten kann. Brauche ich außerdem noch ein extra Array für die Girokonten?</p>
<p>Falls ich etwas wichtiges aus dem Programm nicht gepostet habe müsste man es im ersten Beitrag sehen können.</p>
<p>twens</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839769</guid><dc:creator><![CDATA[twens]]></dc:creator><pubDate>Sat, 16 Jan 2010 14:26:35 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Vererbung, static, etc.... on Sat, 16 Jan 2010 15:20:50 GMT]]></title><description><![CDATA[<p>Du musst das <code>const</code> bei der Definition von <code>zinssatz</code> auch angeben. Ausserdem würde ich statische Variablen in der Implementierungsdatei der Klasse und nicht in <code>main()</code> definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839797</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 16 Jan 2010 15:20:50 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Vererbung, static, etc.... on Sat, 16 Jan 2010 23:21:28 GMT]]></title><description><![CDATA[<p>Hab das mit dem static hinbekommen. Kann sich bitte noch einmal jemand meine Frage zu dem Array angucken?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839975</guid><dc:creator><![CDATA[twens]]></dc:creator><pubDate>Sat, 16 Jan 2010 23:21:28 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Vererbung, static, etc.... on Sun, 17 Jan 2010 10:14:20 GMT]]></title><description><![CDATA[<p>Für dich als Anfänger empfehle ich ersteinmal getrennte Arrays für die verschiedenen Konten.</p>
<p>Wenn du danach dann ein gemeinsames Array benutzen willst, kommst du um &quot;Polymorphie&quot; nicht herum, d.h. du mußt Zeiger in dem std::vector verwalten:</p>
<pre><code class="language-cpp">std::vector&lt; Konto* &gt; vecKonten;
</code></pre>
<p>(wenn du boost oder aber eine neuere Lib mit TR1-Unterstützung hast, kannst du dann auch shared_ptr verwenden - dann brauchst du dich um die Freigabe nicht mehr zu kümmern)</p>
<p>Aber ersteinmal alles der Reihe nach...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1840052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1840052</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sun, 17 Jan 2010 10:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Vererbung, static, etc.... on Sun, 17 Jan 2010 11:06:42 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">float zinssatz;
public:
   Sparkonto()
   {
      static float zinssatz=0.1;
   };
</code></pre>
<p>Das macht so keinen Sinn, da du jetzt 2 verschiedene Variablen angelegt hast (trotz gleichen Namens, nur daß <strong>die 2. in dem Konstruktor nur temporär existiert</strong>) und daher kriegst du auch komische Werte, da die Membervariable uninitialisert bleibt.</p>
</blockquote>
<p>Nicht temporär, die ist static und überlebt damit den ersten Konstruktoraufruf und wird bei allen anderen nicht mehr initialisiert (static halt).<br />
Sie existiert aber nur lokal im Konstruktor, du kannst nur dort darauf zugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1840069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1840069</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sun, 17 Jan 2010 11:06:42 GMT</pubDate></item></channel></rss>