<?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[Grundlagenfrage zu Konstruktoren und Objekten]]></title><description><![CDATA[<p>Hey liebe Community,</p>
<p>wie Ihr sicher gleich unschwer merken werdet, stehe ich gerade am Anfang meiner C++ Erfahrungen.</p>
<p>Das Beispielprogramm besteht aus zwei Klassen: Oberklasse und Person. Objekte von Oberklasse sollen unter anderem als Attribut ein Objekt der Klasse Person enthalten, welches in der Methode &quot;void erstellePerson(string name,int alter)&quot; der Klasse Oberklasse erzeugt werden sollen.</p>
<p>Ich habe Probleme den korrekten Inhalt dieser Funktion hinzuschreiben.<br />
Wie muss dieser aussehen?</p>
<p>Vielen Dank schonmal. <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="🙂"
    /></p>
<p>Der Quellcode:</p>
<p>Oberklasse.h</p>
<pre><code class="language-cpp">//std c++ header
#include &quot;Person.h&quot;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;

#ifndef Oberklasse_h
#define Oberklasse_h Oberklasse_h

using namespace std;

class Oberklasse{

public:        
      Oberklasse(string name);

      Person eg(string,int);

      void erstellePerson(string name,int alter);

      string getName();  
private:   
       string name;
};

#endif
</code></pre>
<p>Oberklasse.cpp</p>
<pre><code class="language-cpp">#include &quot;Oberklasse.h&quot;

#ifndef Oberklasse_cpp
#define Oberklasse_cpp Oberklasse_cpp

// Konstruktor
Oberklasse::Oberklasse(string s){
        this -&gt; name=s;                                                    
}

string Oberklasse::getName(){
       return this -&gt; name;
       }

// Methode erstellt ein neues Objekt der Klasse Person        
void Oberklasse::erstellePerson(string name,int alter){
 Person eg(name,alter);                                // ?????????
 this -&gt; eg=eg;                                        // ??????????
 // Fehlermeldung 18 invalid use of member (did you forget the `&amp;' ?) 
}

int main(int argc, char** argv){

     // Erstellung einer neuen Oberklasse  o
     Oberklasse o(&quot;MeineOberklasse&quot;);
     // Erstellung eines neuen Objektes Person (Attribut des Objektes o)
     o.erstellePerson(&quot;Egon&quot;,34);
     // Ausgabe des Namens der Oberklasse 
     cout &lt;&lt;&quot;Name der Oberklasse: &quot; &lt;&lt; o.getName() &lt;&lt; endl; 
     // Ausgabe des Namens der Person in o
     cout &lt;&lt;&quot;Name der Person: &quot; &lt;&lt; o -&gt; eg.name &lt;&lt;endl;   //  ??????????
     // Ausgabe des Alers der Person in o
     cout &lt;&lt; o.eg.getAlter() &lt;&lt; endl;                     // ??????????

     system(&quot;pause&quot;);  
}
</code></pre>
<p>Person.h</p>
<pre><code class="language-cpp">//std c++ header
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;

#ifndef Person_h
#define Person_h Person_h

using namespace std;

class Person{

public:    
       string name;     

       Person(string name,int alter);

       void setAlter(int a);

       int getAlter();

private: 
        int alter;
};

#endif
</code></pre>
<p>Person.cpp</p>
<pre><code class="language-cpp">#include &quot;Person.h&quot;

#ifndef Person_cpp
#define Person_cpp Person_cpp

Person::Person(string name,int alter){
       this -&gt; name=name;
       this -&gt; alter=alter;
}

int Person::getAlter(){
    return alter;
}

void Person::setAlter(int a){
     this -&gt; alter=a;
}

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/141735/grundlagenfrage-zu-konstruktoren-und-objekten</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 14:17:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141735.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Mar 2006 14:36:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Grundlagenfrage zu Konstruktoren und Objekten on Fri, 24 Mar 2006 14:36:46 GMT]]></title><description><![CDATA[<p>Hey liebe Community,</p>
<p>wie Ihr sicher gleich unschwer merken werdet, stehe ich gerade am Anfang meiner C++ Erfahrungen.</p>
<p>Das Beispielprogramm besteht aus zwei Klassen: Oberklasse und Person. Objekte von Oberklasse sollen unter anderem als Attribut ein Objekt der Klasse Person enthalten, welches in der Methode &quot;void erstellePerson(string name,int alter)&quot; der Klasse Oberklasse erzeugt werden sollen.</p>
<p>Ich habe Probleme den korrekten Inhalt dieser Funktion hinzuschreiben.<br />
Wie muss dieser aussehen?</p>
<p>Vielen Dank schonmal. <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="🙂"
    /></p>
<p>Der Quellcode:</p>
<p>Oberklasse.h</p>
<pre><code class="language-cpp">//std c++ header
#include &quot;Person.h&quot;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;

#ifndef Oberklasse_h
#define Oberklasse_h Oberklasse_h

using namespace std;

class Oberklasse{

public:        
      Oberklasse(string name);

      Person eg(string,int);

      void erstellePerson(string name,int alter);

      string getName();  
private:   
       string name;
};

#endif
</code></pre>
<p>Oberklasse.cpp</p>
<pre><code class="language-cpp">#include &quot;Oberklasse.h&quot;

#ifndef Oberklasse_cpp
#define Oberklasse_cpp Oberklasse_cpp

// Konstruktor
Oberklasse::Oberklasse(string s){
        this -&gt; name=s;                                                    
}

string Oberklasse::getName(){
       return this -&gt; name;
       }

// Methode erstellt ein neues Objekt der Klasse Person        
void Oberklasse::erstellePerson(string name,int alter){
 Person eg(name,alter);                                // ?????????
 this -&gt; eg=eg;                                        // ??????????
 // Fehlermeldung 18 invalid use of member (did you forget the `&amp;' ?) 
}

int main(int argc, char** argv){

     // Erstellung einer neuen Oberklasse  o
     Oberklasse o(&quot;MeineOberklasse&quot;);
     // Erstellung eines neuen Objektes Person (Attribut des Objektes o)
     o.erstellePerson(&quot;Egon&quot;,34);
     // Ausgabe des Namens der Oberklasse 
     cout &lt;&lt;&quot;Name der Oberklasse: &quot; &lt;&lt; o.getName() &lt;&lt; endl; 
     // Ausgabe des Namens der Person in o
     cout &lt;&lt;&quot;Name der Person: &quot; &lt;&lt; o -&gt; eg.name &lt;&lt;endl;   //  ??????????
     // Ausgabe des Alers der Person in o
     cout &lt;&lt; o.eg.getAlter() &lt;&lt; endl;                     // ??????????

     system(&quot;pause&quot;);  
}
</code></pre>
<p>Person.h</p>
<pre><code class="language-cpp">//std c++ header
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;

#ifndef Person_h
#define Person_h Person_h

using namespace std;

class Person{

public:    
       string name;     

       Person(string name,int alter);

       void setAlter(int a);

       int getAlter();

private: 
        int alter;
};

#endif
</code></pre>
<p>Person.cpp</p>
<pre><code class="language-cpp">#include &quot;Person.h&quot;

#ifndef Person_cpp
#define Person_cpp Person_cpp

Person::Person(string name,int alter){
       this -&gt; name=name;
       this -&gt; alter=alter;
}

int Person::getAlter(){
    return alter;
}

void Person::setAlter(int a){
     this -&gt; alter=a;
}

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1023165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023165</guid><dc:creator><![CDATA[Cool_Fire]]></dc:creator><pubDate>Fri, 24 Mar 2006 14:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage zu Konstruktoren und Objekten on Fri, 24 Mar 2006 15:04:57 GMT]]></title><description><![CDATA[<p>**hi,</p>
<p>wie soll das gehen? deine oberklasse hat gar keinen member des typs &quot;person&quot;, nur eine funktion &quot;eg&quot;, die den typ &quot;person&quot; zurückgibt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
wenn sie einen hat, dann wird deren konstruktor schon vor dem konstruktor der oberklasse aufgerufen. was du aber machen könntest ist</p>
<pre><code class="language-cpp">class oberklasse
{
public:
  oberklasse(string name, int alter);
private:
  person p;  
}

oberklasse::oberklasse( string name, int alter ):
  p(name, alter)
{
  //wasauchimmer;
}
</code></pre>
<p>was aber wahrscheinlich nicht gefragt ist, da du ja hier keine methode &quot;erstelle person&quot; haben kannst, denn die person wird schon am anfang erstellt.</p>
<p>was auch gemeint sein könnte, ist, dass du in der oberklasse einen zeiger auf eine person hast, der zunächst auf NULL, und erst nach aufruf von &quot;erstellePerson&quot; auf eine gültige person zeigt:</p>
<pre><code class="language-cpp">class oberklasse
{
public:
  void oberklasse(){p = NULL;}
  void ~oberklasse(){ if(p) delete p;} //ganz wichtig.

  void erstellePerson(string name, int alter)
  {
     p = new person(name, alter);
  }
private:
  person *p;
};
```**</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1023181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023181</guid><dc:creator><![CDATA[gadfabelasr]]></dc:creator><pubDate>Fri, 24 Mar 2006 15:04:57 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage zu Konstruktoren und Objekten on Fri, 24 Mar 2006 15:54:27 GMT]]></title><description><![CDATA[<p>Hey gadfabelasr,</p>
<p>Die zweite Antwort war genau die, die ich gesucht habe, DANKE. <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="🙂"
    /></p>
<p>Eine Frage fällt mir jetzt noch ein. Wenn eigene Klassen Attribute von anderen Klassen sind, müssen diese dann immer als Pointer deklariert werden?</p>
<p>Ich habe deine Lösung mit in meinen Quellcode eingebastelt. Er läuft jetzt so wie von mir gewünscht.</p>
<p>Anhang: der korriegierte Quellcode.</p>
<p>Oberklasse.h</p>
<pre><code class="language-cpp">//std c++ header
#include &quot;Person.h&quot;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;iostream&gt;

#ifndef Oberklasse_h
#define Oberklasse_h Oberklasse_h

using namespace std;

class Oberklasse
{
public:
  //Konst / Dest
  Oberklasse(string name);
  ~Oberklasse();

   //Attribute
  string getName();
  Person *p;

  //Methoden
  void erstellePerson(string name, int alter);

private:
   //Attribute 
  string name;
};
#endif
</code></pre>
<p>Oberklasse.cpp</p>
<pre><code class="language-cpp">#include &quot;Oberklasse.h&quot;

#ifndef Oberklasse_cpp
#define Oberklasse_cpp Oberklasse_cpp

  Oberklasse::Oberklasse(string name){
       this -&gt; name=name;
       p = NULL;
  }

  Oberklasse::~Oberklasse(){
        if(p) delete p;

  } //ganz wichtig.

  void Oberklasse::erstellePerson(string name, int alter){
     p = new Person(name, alter);
  }

  string Oberklasse::getName(){
       return this -&gt; name;
  }

  int main(int argc, char** argv){

     // Erstellung einer neuen Oberklasse  o
     Oberklasse o(&quot;MeineOberklasse&quot;);
     // Erstellung eines neuen Objektes Person (Attribut des Objektes o)
     o.erstellePerson(&quot;Egon&quot;,34);
     // Ausgabe des Namens der Oberklasse 
     cout &lt;&lt;&quot;Name der Oberklasse: &quot; &lt;&lt; o.getName() &lt;&lt; endl; 
     // Ausgabe des Namens der Person in o
     cout &lt;&lt;&quot;Name der Person: &quot; &lt;&lt; o.p -&gt; name &lt;&lt;endl;  
     // Ausgabe des Alers der Person in o
      cout &lt;&lt;&quot;Alter der Person: &quot; &lt;&lt; o.p -&gt; getAlter()  &lt;&lt; endl;                  

     system(&quot;pause&quot;);  
}
</code></pre>
<p>Person.h und Person.cpp wurden nicht verändert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023220</guid><dc:creator><![CDATA[Cool_Fire]]></dc:creator><pubDate>Fri, 24 Mar 2006 15:54:27 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage zu Konstruktoren und Objekten on Fri, 24 Mar 2006 16:10:58 GMT]]></title><description><![CDATA[<p>**hi,</p>
<blockquote>
<p>Eine Frage fällt mir jetzt noch ein. Wenn eigene Klassen Attribute von anderen Klassen sind, müssen diese dann immer als Pointer deklariert werden?</p>
</blockquote>
<p>nein, du kannst sie genau so wie ints, oder sonstwas als &quot;echte&quot; member deklarieren. pointer brauchst du, wenn du sie unabhängig von der übergeordneten klasse erstellen/löschen willst. (wie in deinem beispiel.) :)**</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023234</guid><dc:creator><![CDATA[gadfabelasr]]></dc:creator><pubDate>Fri, 24 Mar 2006 16:10:58 GMT</pubDate></item><item><title><![CDATA[Reply to Grundlagenfrage zu Konstruktoren und Objekten on Fri, 24 Mar 2006 16:34:00 GMT]]></title><description><![CDATA[<p>Okay <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023259</guid><dc:creator><![CDATA[Cool_Fire]]></dc:creator><pubDate>Fri, 24 Mar 2006 16:34:00 GMT</pubDate></item></channel></rss>