<?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[Frage zu Quellcode]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Frage zu folgendem Quellcode:</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

      class Mitarbeiter
      {

            protected:
                      string nachname;
                      string vorname;
                      float gehalt;

            public:
                  //1. FRAGE:
                  //Warum ist die folende Zeile nicht erlaubt?
                  //Mitarbeiter (string nn, string vn, float g): nachname(nn), vorname (vn), gehalt(g);

                  Mitarbeiter(string nn, string vn, float g): nachname(nn), vorname (vn), gehalt(g){}

                   void datenausgeben(){
                        cout &lt;&lt; &quot;Vorname: &quot; &lt;&lt; vorname &lt;&lt; &quot; Nachname: &quot; &lt;&lt; nachname &lt;&lt; &quot; Gehalt: &quot; &lt;&lt; gehalt &lt;&lt;endl;
                        }
};

  class Angestellter : public Mitarbeiter
  {
     private: int urlaubsanspruch;

    public:
    Angestellter(string nn, string vn, float g, int u) : Mitarbeiter(nn, vn, g), urlaubsanspruch(u) {}

      //2. FRAGE:
     //Warum ist das hier nicht erlaubt?
    // Angestellter(string nn, string vn, float g, int u) : nachname(nn), vorname (vn), gehalt (g), urlaubsanspruch(u);

     //3.FRAGE
     //Ist das mit JAva- Vergleichbar (bei Java habe ich immer <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17722">@override</a> geschreiben??)
     void datenausgeben() {
/4. Frage:
//Ist der Aufruf der Methode der Superklasse so korrekt?
     Mitarbeiter::datenausgeben();
     cout &lt;&lt; &quot;Urlaub &quot; &lt;&lt; urlaubsanspruch &lt;&lt; endl;   

     }

};

int main(int argc, char *argv[])
{
    Angestellter huber (&quot;Anton&quot;,&quot;Huber&quot;,20,30);

    huber.datenausgeben();

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>Kann mir jemand bitte die Fragen beantworten?</p>
<p>Vielen Dank!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280439/frage-zu-quellcode</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 02:04:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280439.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Jan 2011 18:22:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Quellcode on Sat, 15 Jan 2011 18:22:56 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Frage zu folgendem Quellcode:</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

      class Mitarbeiter
      {

            protected:
                      string nachname;
                      string vorname;
                      float gehalt;

            public:
                  //1. FRAGE:
                  //Warum ist die folende Zeile nicht erlaubt?
                  //Mitarbeiter (string nn, string vn, float g): nachname(nn), vorname (vn), gehalt(g);

                  Mitarbeiter(string nn, string vn, float g): nachname(nn), vorname (vn), gehalt(g){}

                   void datenausgeben(){
                        cout &lt;&lt; &quot;Vorname: &quot; &lt;&lt; vorname &lt;&lt; &quot; Nachname: &quot; &lt;&lt; nachname &lt;&lt; &quot; Gehalt: &quot; &lt;&lt; gehalt &lt;&lt;endl;
                        }
};

  class Angestellter : public Mitarbeiter
  {
     private: int urlaubsanspruch;

    public:
    Angestellter(string nn, string vn, float g, int u) : Mitarbeiter(nn, vn, g), urlaubsanspruch(u) {}

      //2. FRAGE:
     //Warum ist das hier nicht erlaubt?
    // Angestellter(string nn, string vn, float g, int u) : nachname(nn), vorname (vn), gehalt (g), urlaubsanspruch(u);

     //3.FRAGE
     //Ist das mit JAva- Vergleichbar (bei Java habe ich immer <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17722">@override</a> geschreiben??)
     void datenausgeben() {
/4. Frage:
//Ist der Aufruf der Methode der Superklasse so korrekt?
     Mitarbeiter::datenausgeben();
     cout &lt;&lt; &quot;Urlaub &quot; &lt;&lt; urlaubsanspruch &lt;&lt; endl;   

     }

};

int main(int argc, char *argv[])
{
    Angestellter huber (&quot;Anton&quot;,&quot;Huber&quot;,20,30);

    huber.datenausgeben();

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>Kann mir jemand bitte die Fragen beantworten?</p>
<p>Vielen Dank!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006999</guid><dc:creator><![CDATA[Role]]></dc:creator><pubDate>Sat, 15 Jan 2011 18:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Quellcode on Sat, 15 Jan 2011 18:45:40 GMT]]></title><description><![CDATA[<p>In C++ haste .h und .cpps</p>
<p>die .h's deklarieren (was gibts?) die .cpp's definieren (wie funktionierts?). Wenn du Konstruktor mit Initialisierungslisten nutzt, gehört das zum &quot;wie funktionierts&quot; ... daher brauchst du einen Methodenrumpf (in deinem Fall reicht <code>{}</code> weil da sonst nix passiert (siehe: <a href="http://www.c-plusplus.net/forum/p434874#434874" rel="nofollow">http://www.c-plusplus.net/forum/p434874#434874</a>)</p>
<p>Normalerweise so:</p>
<p>mitarbeiter.h</p>
<pre><code class="language-cpp">#include &lt;string&gt;

// using namespace std; // niemals in Headern!!

class Mitarbeiter
{
protected:
  std::string nachname;
  std::string vorname;
  float gehalt;

public:
  Mitarbeiter(std::string, std::string, float);                   
  virtual void datenausgeben(); // wird von abgeleiteten Klassen überschrieben und dann deren Methode genutzt selbst bei pointern auf die Basisklasse
};
</code></pre>
<p>mitarbeiter.cpp</p>
<pre><code class="language-cpp">#include &quot;mitarbeiter.h&quot;
#include &lt;iostream&gt;
using namespace std;       

Mitarbeiter::Mitarbeiter(string nn, string vn, float g) : nachname(nn), vorname (vn), gehalt(g)
{
}

void Mitarbeiter::datenausgeben()
{
  cout &lt;&lt; &quot;Vorname: &quot; &lt;&lt; vorname &lt;&lt; &quot; Nachname: &quot; &lt;&lt; nachname &lt;&lt; &quot; Gehalt: &quot; &lt;&lt; gehalt &lt;&lt;endl;
}
</code></pre>
<p>angestellter.h</p>
<pre><code class="language-cpp">#include &quot;mitarbeiter.h&quot;
#include &lt;string&gt;

class Angestellter : public Mitarbeiter
{
   // automatisch private 
   int urlaubsanspruch;

public:
   Angestellter(std::string, std::string, float, int);     
   void datenausgeben();
};
</code></pre>
<p>angestellter.cpp</p>
<pre><code class="language-cpp">#include &quot;angesteller.h&quot;
#include &lt;iostream&gt;
using namespace std;       

Angestellter::Angestellter(string nn, string vn, float g, int u) : Mitarbeiter(nn, vn, g), urlaubsanspruch(u) 
{
}

void Angestellter::datenausgeben() 
{
   Mitarbeiter::datenausgeben();
   cout &lt;&lt; &quot;Urlaub &quot; &lt;&lt; urlaubsanspruch &lt;&lt; endl;                  
} 
};
</code></pre>
<p>hab grad kein compiler zur Hand, Flüchtigkeitsfehler vorbehalten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2007008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2007008</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Sat, 15 Jan 2011 18:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Quellcode on Sat, 15 Jan 2011 18:46:33 GMT]]></title><description><![CDATA[<p>1. Du musst unterscheiden zwischen Deklaration und Definition von Funktionen (incl. Konstruktoren):</p>
<pre><code class="language-cpp">Mitarbeiter(string nn, string vn, float g);
</code></pre>
<p>ist eine Funktionsdeklaration. Bei Deklarationen teilt man dem Compiler mit, dass es so eine Funktion gibt, welche Argumente sie hat und was sie &quot;returnt&quot;.</p>
<pre><code class="language-cpp">Mitarbeiter(string nn, string vn, float g): nachname(nn), vorname (vn), gehalt(g){ ; }
</code></pre>
<p>ist eine Definition. Es wird genau mitgeteilt, was passieren soll, wenn die Funktion aufgerufen wird (darum habe ich spaßeshalber ein &quot;;&quot; zwischen &quot;{ }&quot; eingefügt, weil Du dort auch Code reinschreiben kannst). Eine Initialisierungliste -das hinter dem Doppelpunkt- ist nur in der Definition erlaubt. Du gibt ja dort quasi schon Anweisungen, was passieren soll, wenn so ein Objekt angelegt wird. Das geht über die reine Deklaration hinaus.</p>
<p>2. s. 1.</p>
<p>3. kenne Java kaum.</p>
<p>4. richtig. Durch die Redefinition von datenausgeben() in der abgeleiteten Klasse ist der Eintrag der alten Funktion in er Funktionstabelle überschrieben. Um an die Funktion der Basisklasse aufzurufen musst Du das kenntlich machen mit Mitarbeiter::</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2007010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2007010</guid><dc:creator><![CDATA[Holger_G]]></dc:creator><pubDate>Sat, 15 Jan 2011 18:46:33 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Quellcode on Sat, 15 Jan 2011 19:27:29 GMT]]></title><description><![CDATA[<p>1. + 2.: <a href="http://www.c-plusplus.net/forum/p1993089#1993089" rel="nofollow">http://www.c-plusplus.net/forum/p1993089#1993089</a> zur genauen Erklärung von Header/Source.<br />
3.: Lass mich raten... meinst du so etwas wie aus dem kommenden C++-Standard? <a href="http://en.wikipedia.org/wiki/C%2B%2B0x#Explicit_virtual_function_overrides" rel="nofollow">http://en.wikipedia.org/wiki/C%2B%2B0x#Explicit_virtual_function_overrides</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2007029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2007029</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sat, 15 Jan 2011 19:27:29 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Quellcode on Mon, 17 Jan 2011 17:16:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>mit Override habe ich so etwas gemeint:</p>
<pre><code class="language-java">Mit diesem Typ kann eine Methode gekennzeichnet werden, die die Methode ihrer Oberklasse überschreibt. Der Compiler stellt dann sicher, dass die Oberklasse diese Methode enthält und gibt einen Fehler aus, wenn dies nicht der Fall ist. 
Beispiel:

public class A {
    public void eineMethode() {}
}

public class B extends A {
    <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17722">@Override</a>
    public void eineMethode() {}
}
</code></pre>
<p>Ich habe noch eine Frage:</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

      class Mitarbeiter
      {

            protected:
                      string nachname;
                      string vorname;
                      float gehalt;

            public:
                  //WARUM WIRD DER STANDARDKONSTRUKTOR NOCH EXTRA BENÖTIGT??
                  Mitarbeiter () {

                              }

                  Mitarbeiter(string nn, string vn, float g): nachname(nn), vorname (vn), gehalt(g){}

                   void datenausgeben(){
                        cout &lt;&lt; &quot;Vorname: &quot; &lt;&lt; vorname &lt;&lt; &quot; Nachname: &quot; &lt;&lt; nachname &lt;&lt; &quot; Gehalt: &quot; &lt;&lt; gehalt &lt;&lt;endl;
                        }
};

  class Angestellter : public Mitarbeiter
  {
     private: int urlaubsanspruch;

    public:
    Angestellter(string nn, string vn, float g, int u) : urlaubsanspruch(u) {

    nachname = nn;
    vorname = vn;
    gehalt = g;

                        }

     void datenausgeben() {
     Mitarbeiter::datenausgeben();
     cout &lt;&lt; &quot;Urlaub &quot; &lt;&lt; urlaubsanspruch &lt;&lt; endl;   

     }

};

int main(int argc, char *argv[])
{
    Angestellter huber (&quot;Anton&quot;,&quot;Huber&quot;,20,30);

    huber.datenausgeben();

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>Wenn ich die Werte im Konstruktor der Klasse Angestellter setzen möchte, dann muss ich den Standardkonstruktor von Mitarbeiter definieren.</p>
<p>Wisst ihr warum das so ist?</p>
<p>Ich dacht der Standardkonstruktor ist automatisch vorhanden?</p>
<p>Vielen Dank!</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2007840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2007840</guid><dc:creator><![CDATA[Role]]></dc:creator><pubDate>Mon, 17 Jan 2011 17:16:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Quellcode on Mon, 17 Jan 2011 18:07:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

class Mitarbeiter {

protected:
    string nachname;
    string vorname;
    float gehalt;

public:
    //WARUM WIRD DER STANDARDKONSTRUKTOR NOCH EXTRA BENÖTIGT??
    // Mitarbeiter () {} // WIRD ER NICHT WENN MANS RICHTIG MACHT!!!!!

    Mitarbeiter(string nn, string vn, float g): nachname(nn), vorname (vn), gehalt(g){}

    virtual  // DAMIT WIRD SIGNALISIERT DAS DAS VON ABGELEITETEN KLASSEN  ÜBERSCHRIEBEN WIRD, SONST &quot;VERDECKST&quot; DU NUR
    void datenausgeben() {
        cout &lt;&lt; &quot;Vorname: &quot; &lt;&lt; vorname &lt;&lt; &quot; Nachname: &quot; &lt;&lt; nachname &lt;&lt; &quot; Gehalt: &quot; &lt;&lt; gehalt &lt;&lt;endl;
    }
};

class Angestellter : public Mitarbeiter {
private: 
    int urlaubsanspruch;    
public:
    /* SO FALSCH
    Angestellter(string nn, string vn, float g, int u) : urlaubsanspruch(u) {

        nachname = nn;
        vorname = vn;
        gehalt = g;        
    } */

    Angestellter(string nn, string vn, float g, int u) : Mitarbeiter(nn,vn,u), urlaubsanspruch(u) {} // BASISKLASSENKONSTRUKTOR AUFRUFEN, DU MACHST DAS NICHT DAHER BRAUCHST
                                                                                                     // DU NOCH DEN () KONSTRUKTOR ZUM KONSTRUIEREN DER LEEREN BASISKLASSE
    } 

    void datenausgeben() {
        Mitarbeiter::datenausgeben();
        cout &lt;&lt; &quot;Urlaub &quot; &lt;&lt; urlaubsanspruch &lt;&lt; endl;  
    }
};
</code></pre>
<p>Spass (und Geschreie) beiseite, das mit dem virual wird dann wichtig wenn du sowas machst</p>
<pre><code class="language-cpp">Mitarbeiter * mit = new Angestellter(&quot;a&quot;,&quot;b&quot;, 1.2, 344);
  mit-&gt;datenausgeben();
</code></pre>
<p>Wenn du das nicht als viruell deklarierst nimmt der hier die Datenausgabe von Mitarbeiter und unterschlägt die Urlaubstage, als virtuell deklariert wird erst aufgelöst welche Klasse das wirklich ist und dann die überladene Methode genommen. Wenn du nur verdeckst (die selbe Methode nochmal in der Kindklasse implementierst findet diese Auflösung NICHT statt und er nimmt auch die von Mitarbeiter. Achso und wenn du GANZ GENAU HINSCHAUST siehst du das ich das mit dem virutal bereits in der ersten Antwort schrieb ... aber so ein keyword ist leicht übersehen. Und zum Thema &quot;Konstruktor ist automatisch da ... &quot; das gilt nur wenn du KEINEN Konstruktor schreibst, dann musst du das selbst machen. Es ginge in deinem Fall auch einfach so:</p>
<pre><code class="language-cpp">Mitarbeiter(string nn=&quot;&quot;, string vn=&quot;&quot;, float g=0.0): nachname(nn), vorname (vn), gehalt(g){}
</code></pre>
<p>dann wird im Fall von <code>Mitarbeiter gaertner;</code> dieser mit namen &quot;&quot;, vornamen &quot;&quot; und Gehalt 0.0 angelegt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2007901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2007901</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Mon, 17 Jan 2011 18:07:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Quellcode on Mon, 17 Jan 2011 18:45:50 GMT]]></title><description><![CDATA[<p>Wie gesagt, sicherstellen, dass etwas überschrieben wird, kannst du nur in C++0x...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2007923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2007923</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Mon, 17 Jan 2011 18:45:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Quellcode on Mon, 17 Jan 2011 21:14:55 GMT]]></title><description><![CDATA[<p>Danke für die Antworten!</p>
<p>Virtual hatten wir bis jetzt noch nicht in der Vorlesung.</p>
<p>Ist das dann generell so: Sobald ich selbst einen Konstruktor erzeuge, dann existiert der Standardkonstruktor nicht mehr, sondern muss ihn noch mal explizit selbst erstellen??</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008014</guid><dc:creator><![CDATA[Role]]></dc:creator><pubDate>Mon, 17 Jan 2011 21:14:55 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Quellcode on Mon, 17 Jan 2011 21:20:42 GMT]]></title><description><![CDATA[<p>Role schrieb:</p>
<blockquote>
<p>Sobald ich selbst einen Konstruktor erzeuge, dann existiert der Standardkonstruktor nicht mehr, sondern muss ihn noch mal explizit selbst erstellen??</p>
</blockquote>
<p>richtig <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2008019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008019</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 17 Jan 2011 21:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Quellcode on Mon, 17 Jan 2011 21:25:57 GMT]]></title><description><![CDATA[<p>Schau dir mal die Dreierregel an!</p>
<p>-Kopierkonstruktor<br />
-Konstruktor/Destruktor<br />
-Zuweisungsoperator</p>
<p>Alles Sachen die ohne zu Fragen erstellt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2008021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2008021</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Mon, 17 Jan 2011 21:25:57 GMT</pubDate></item></channel></rss>