<?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[Objekt in C++]]></title><description><![CDATA[<p>Hallo.</p>
<p>Habe ein Problem beim schreiben einer simplen klasse CPerson welche als Eigenschaft/Atribut Vor-, Nachnamen und Alter übergeben bekommt und ausgibt.</p>
<p>Das Problem bei der Sache sei dass die übergebenen Werte nicht übernomen/gesetzt werden ausser den letzten Wert...</p>
<p>Werden die Werte verworfen ??? Mit unsigned int als Übergebewerte in einer ähnlichen Klasse klappt das übergeben wunderbar nur bei char nicht ?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 

class CPerson 
{ 
public: 
CPerson(char[], char[], unsigned int); 
~CPerson(); 
void vorname_anzeigen(); 
void nachname_anzeigen(); 
void alter_anzeigen(); 
void info(); 
protected: 
char vorname[], nachname[]; 
unsigned int alter; 
}; 

CPerson::CPerson(char add[], char name[], unsigned int age) 
{strcpy(vorname,add); strcpy(nachname,name); alter=age;} 

CPerson::~CPerson() {} 

void CPerson::vorname_anzeigen() {cout &lt;&lt; &quot;vorname : &quot; &lt;&lt; vorname &lt;&lt; &quot;\n&quot;;} 

void CPerson::nachname_anzeigen() {cout &lt;&lt; &quot;nachname : &quot; &lt;&lt; nachname &lt;&lt; &quot;\n&quot;;} 

void CPerson::alter_anzeigen() {cout &lt;&lt; &quot;alter : &quot; &lt;&lt; alter &lt;&lt; &quot;\n&quot;;} 

void CPerson::info() {CPerson::vorname_anzeigen();CPerson::nachname_anzeigen();CPerson::alter_anzeigen();} 

void main(void) 
{ 
CPerson jemand(&quot;Vorname&quot;,&quot;Nachname&quot;,28); 
jemand.info(); 
cout &lt;&lt; &quot;Weiter mit beliebigen Taste...&quot;; 
cin.get(); 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/220268/objekt-in-c</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 11:00:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220268.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Aug 2008 20:07:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt in C++ on Wed, 13 Aug 2008 20:07:40 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Habe ein Problem beim schreiben einer simplen klasse CPerson welche als Eigenschaft/Atribut Vor-, Nachnamen und Alter übergeben bekommt und ausgibt.</p>
<p>Das Problem bei der Sache sei dass die übergebenen Werte nicht übernomen/gesetzt werden ausser den letzten Wert...</p>
<p>Werden die Werte verworfen ??? Mit unsigned int als Übergebewerte in einer ähnlichen Klasse klappt das übergeben wunderbar nur bei char nicht ?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 

class CPerson 
{ 
public: 
CPerson(char[], char[], unsigned int); 
~CPerson(); 
void vorname_anzeigen(); 
void nachname_anzeigen(); 
void alter_anzeigen(); 
void info(); 
protected: 
char vorname[], nachname[]; 
unsigned int alter; 
}; 

CPerson::CPerson(char add[], char name[], unsigned int age) 
{strcpy(vorname,add); strcpy(nachname,name); alter=age;} 

CPerson::~CPerson() {} 

void CPerson::vorname_anzeigen() {cout &lt;&lt; &quot;vorname : &quot; &lt;&lt; vorname &lt;&lt; &quot;\n&quot;;} 

void CPerson::nachname_anzeigen() {cout &lt;&lt; &quot;nachname : &quot; &lt;&lt; nachname &lt;&lt; &quot;\n&quot;;} 

void CPerson::alter_anzeigen() {cout &lt;&lt; &quot;alter : &quot; &lt;&lt; alter &lt;&lt; &quot;\n&quot;;} 

void CPerson::info() {CPerson::vorname_anzeigen();CPerson::nachname_anzeigen();CPerson::alter_anzeigen();} 

void main(void) 
{ 
CPerson jemand(&quot;Vorname&quot;,&quot;Nachname&quot;,28); 
jemand.info(); 
cout &lt;&lt; &quot;Weiter mit beliebigen Taste...&quot;; 
cin.get(); 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1564336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564336</guid><dc:creator><![CDATA[rumcajs007]]></dc:creator><pubDate>Wed, 13 Aug 2008 20:07:40 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Wed, 13 Aug 2008 20:25:01 GMT]]></title><description><![CDATA[<p>Hi,<br />
würde an deiner Stelle die strings entweder mit als &quot;string&quot; deklarieren oder &quot;char*&quot; charpointer verwenden. Dann brauchst du nur noch die Addresse für den String übergeben (der Pointer) und brauchst die strcpy funktion nicht mehr.</p>
<p>Dann kannst du auch machen:</p>
<pre><code class="language-cpp">CPerson::CPerson(char* add, char* name, unsigned int age)
   :vornamme(add), nachname(name), alter(age) {

}
</code></pre>
<p>Attribute wie altern, vorname, nachname solltest du als private deklarieren.</p>
<p>Gruß Andy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564340</guid><dc:creator><![CDATA[Andy2211]]></dc:creator><pubDate>Wed, 13 Aug 2008 20:25:01 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Wed, 13 Aug 2008 20:24:32 GMT]]></title><description><![CDATA[<p>rumcajs007 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt; 

class CPerson 
{ 
public: 
CPerson(char[], char[], unsigned int); 
~CPerson(); 
void vorname_anzeigen(); 
void nachname_anzeigen(); 
void alter_anzeigen(); 
void info(); 
protected: 
char vorname[], nachname[];        // hier liegt dein fehler...
unsigned int alter; 
}; 

CPerson::CPerson(char add[], char name[], unsigned int age) 
{strcpy(vorname,add); strcpy(nachname,name); alter=age;} 

CPerson::~CPerson() {} 

void CPerson::vorname_anzeigen() {cout &lt;&lt; &quot;vorname : &quot; &lt;&lt; vorname &lt;&lt; &quot;\n&quot;;} 

void CPerson::nachname_anzeigen() {cout &lt;&lt; &quot;nachname : &quot; &lt;&lt; nachname &lt;&lt; &quot;\n&quot;;} 

void CPerson::alter_anzeigen() {cout &lt;&lt; &quot;alter : &quot; &lt;&lt; alter &lt;&lt; &quot;\n&quot;;} 

void CPerson::info() {CPerson::vorname_anzeigen();CPerson::nachname_anzeigen();CPerson::alter_anzeigen();} 

void main(void) 
{ 
CPerson jemand(&quot;Vorname&quot;,&quot;Nachname&quot;,28); 
jemand.info(); 
cout &lt;&lt; &quot;Weiter mit beliebigen Taste...&quot;; 
cin.get(); 
}
</code></pre>
</blockquote>
<p>dein fehler ist folgender:<br />
du erstellst 2 char arrays aber mit undefinierter grösse...<br />
und dann willst du da was reinschreiben</p>
<p>eigendlich sollte der compiler schon mekcern, wenn icht dann sollte wenigstens das bestriebssystem meckern weil du unerlaubt in irgendeinen speicher schreibst...</p>
<p>nimm entweder von anfang an std::string oder versuchs mal mit nem char-pointer</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 

class CPerson 
{ 
public: 
CPerson(char[], char[], unsigned int); 
~CPerson(); 
void vorname_anzeigen(); 
void nachname_anzeigen(); 
void alter_anzeigen(); 
void info(); 
protected: 
char *vorname;
char *nachname;
unsigned int alter; 
}; 

CPerson::CPerson(char add[], char name[], unsigned int age) 
{strcpy(vorname,add); strcpy(nachname,name); alter=age;} 

CPerson::~CPerson() {} 

void CPerson::vorname_anzeigen() {cout &lt;&lt; &quot;vorname : &quot; &lt;&lt; vorname &lt;&lt; &quot;\n&quot;;} 

void CPerson::nachname_anzeigen() {cout &lt;&lt; &quot;nachname : &quot; &lt;&lt; nachname &lt;&lt; &quot;\n&quot;;} 

void CPerson::alter_anzeigen() {cout &lt;&lt; &quot;alter : &quot; &lt;&lt; alter &lt;&lt; &quot;\n&quot;;} 

void CPerson::info() {CPerson::vorname_anzeigen();CPerson::nachname_anzeigen();CPerson::alter_anzeigen();} 

void main(void) 
{ 
CPerson jemand(&quot;Vorname&quot;,&quot;Nachname&quot;,28); 
jemand.info(); 
cout &lt;&lt; &quot;Weiter mit beliebigen Taste...&quot;; 
cin.get(); 
}
</code></pre>
<p>sollte so eig klappen doer? (nicht getestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564341</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 13 Aug 2008 20:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Wed, 13 Aug 2008 20:35:58 GMT]]></title><description><![CDATA[<p>hallo.<br />
vielen dank schon mal für eure schnellen antworten.<br />
vieleicht sollte ich schon am anfang sagen dass ich nicht mit string objekten und pointern coden wollte obwohl es das sinvoller wäre das ist fakt. schreibe gerade so ein tutorial mal für mich was ich schon so gelernt habe und wollte klein anfangen. ich werde jetz mal versuchen die variablen zu präzisieren und werde dann nochmal berichten. :p</p>
<p>gruss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564346</guid><dc:creator><![CDATA[rumcajs007]]></dc:creator><pubDate>Wed, 13 Aug 2008 20:35:58 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Thu, 14 Aug 2008 05:39:34 GMT]]></title><description><![CDATA[<p>&quot;Klein&quot; fängt man aber bestimmt nicht mit char-Pointern an...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564413</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 14 Aug 2008 05:39:34 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Thu, 14 Aug 2008 09:11:56 GMT]]></title><description><![CDATA[<p>rumcajs007 schrieb:</p>
<blockquote>
<p>...vieleicht sollte ich schon am anfang sagen dass ich nicht mit string objekten und pointern coden wollte obwohl es das sinvoller wäre das ist fakt. ...</p>
</blockquote>
<p>Also &quot;Du willst nicht&quot; mag Fakt sein, aber es bleibt trotzdem Quatsch - besonders, wenn Du selbst schon erkannt hast dass &quot;... das sinnvoller wäre ...&quot;.<br />
Ich hoffe, Du machst nicht allzuviel in Deinem Leben wider besseres Wissen.</p>
<p>und wenn Du Dir um die &quot;Didaktik&quot; (also einen sinnvollen Lern-/Lehrweg) machst, rate ich, Dir einfach mal das erste Post in diesem Thread anzusehen (also Dein eigenes) - da siehst ein Beispiel für die Probleme, die man bekommt, wenn man Anfängern Zeichenkettenverwaltung mit char* zumutet, statt gleich den richtigen Typ (std::string) zu verwenden.... es scheint also nicht wirklich der bessere Lerneinstieg zu sein.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564452</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 14 Aug 2008 09:11:56 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Thu, 14 Aug 2008 08:39:17 GMT]]></title><description><![CDATA[<blockquote>
<p>CPerson::CPerson(char add[], char name[], unsigned int age)</p>
</blockquote>
<p>rumcajs007 schrieb:</p>
<blockquote>
<p>vieleicht sollte ich schon am anfang sagen dass ich nicht mit string objekten und pointern coden wollte ...</p>
</blockquote>
<p>Dir ist aber hoffentlich klar dass &quot;add&quot; und &quot;name&quot; 2 POINTER SIND.<br />
Wenn nicht solltest du vermutlich mal deine C++ Syntaxkenntnisse aufbessern.</p>
<p>----</p>
<p>Andy2211 schrieb:</p>
<blockquote>
<p>&quot;char*&quot;</p>
</blockquote>
<p>Wenn dann bitte &quot;char const*&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564508</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 14 Aug 2008 08:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Thu, 14 Aug 2008 09:39:01 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>&quot;Klein&quot; fängt man aber bestimmt nicht mit char-Pointern an...</p>
</blockquote>
<p>wollte ich auch nicht <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>
<p>hustbaer schrieb:</p>
<blockquote>
<blockquote>
<p>CPerson::CPerson(char add[], char name[], unsigned int age)</p>
</blockquote>
<p>rumcajs007 schrieb:</p>
<blockquote>
<p>vieleicht sollte ich schon am anfang sagen dass ich nicht mit string objekten und pointern coden wollte ...</p>
</blockquote>
<p>Dir ist aber hoffentlich klar dass &quot;add&quot; und &quot;name&quot; 2 POINTER SIND.<br />
Wenn nicht solltest du vermutlich mal deine C++ Syntaxkenntnisse aufbessern.</p>
<p>----</p>
<p>Andy2211 schrieb:</p>
<blockquote>
<p>&quot;char*&quot;</p>
</blockquote>
<p>Wenn dann bitte &quot;char const*&quot;.</p>
</blockquote>
<p>das war ein verbessertes code nicht von mir <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>sooo, hab jetzt die zwei char variablen auf 25 gesetzt mit erfolg, die werte werden übergeben bzw. angezeigt/übernomen.</p>
<pre><code class="language-cpp">...
void info(); 
protected: 
char vorname[25], nachname[25]; 
unsigned int alter;
...
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564555</guid><dc:creator><![CDATA[rumcajs007]]></dc:creator><pubDate>Thu, 14 Aug 2008 09:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Thu, 14 Aug 2008 09:58:58 GMT]]></title><description><![CDATA[<p>rumcajs007 schrieb:</p>
<blockquote>
<p>vieleicht sollte ich schon am anfang sagen dass ich nicht mit string objekten und pointern coden wollte obwohl es das sinvoller wäre das ist fakt. schreibe gerade so ein tutorial mal für mich was ich schon so gelernt habe und wollte klein anfangen...</p>
</blockquote>
<p>Da jedes gute C++ Tutorial, ob nun für dich oder für andere nicht mit char-Arrays oder char* Pointern beginnt, sondern gleich mit std::string, ist es - gelinde gesagt - Schwachsinn.</p>
<p>C-Arrays sowie Pointer sind meines Erachtens erst später sinnvoll da sich z.B. Arrays nicht so verhalten wie von anderen C++ Objekten gewohnt, und Zeiger mit Sicherheit auch nicht das sind, was ein Anfänger gleich versteht.</p>
<p>Eine weitere Sache: Ausgaben sollte man möglichst von der restlichen Logik entkoppeln. Eine Personenklasse hat meines erachtens nichts mit der UI zu tun.</p>
<p>Weiterhin trennt man Implementation und Deklaration voneinander (cpp/h), und es ist sinnvoll auch in der Deklaration die Parameternamen anzugeben (alleine schon da man schneller mal einen Header überblickt, als die zugehörige Implementierung, und die Implementierung den Benutzer einer Klasse egal sein sollte solange man sich an deren Schnittstelle hält.</p>
<p>Und: Wenn du mit Arrays/Zeigern arbeitest musst du dich auch um den Kopierkonstruktor, Zuweisungsoperator und die Speicherfreigabe kümmern...</p>
<p>&quot;void main&quot; gibt es nicht!</p>
<p>Zu guter letzt hilft sinnvolles einrücken beim Lesen...</p>
<p>Mal eine andere Variante (ungetestet):</p>
<p>// Person.h</p>
<pre><code class="language-cpp">#ifndef PERSON_HEADER
#define PERSON_HEADER

#include &lt;string&gt;

class Person
{
  public:
    Person(
      std::string const &amp; vorname,
      std::string const &amp; nachname,
      unsigned int alter);
    ~Person();

    std::string GetVorname() const;
    void SetVorname(
      std::string const &amp; vorname);
    std::string GetNachname() const;
    void SetVorname(
      std::string const &amp; nachname);
    unsigned int GetAlter() const;
    void SetAlter(
      unsigned int alter);

  private:
    std::string vorname;
    std::string nachname;
    unsigned int alter;
};

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

Person::Person(
  std::string const &amp; vorname,
  std::string const &amp; nachname,
  unsigned int alter)
: vorname(vorname),
  nachname(nachname),
  alter(alter)
{}

Person::~Person()
{}

std::string Person::GetVorname() const
{
  return vorname;
}

void Person::SetVorname(
  std::string const &amp; vorname)
{
  this-&gt;vorname = vorname;
}

std::string Person::GetNachname() const
{
  return nachname;
}

void Person::SetNachname(
  std::string const &amp; nachname)
{
  this-&gt;nachname= nachname;
}

unsigned int Person::GetAlter() const
{
  return alter;
}

void Person::SetAlter(
  unsigned int alter)
{
  this-&gt;alter = alter
}
</code></pre>
<p>// PersonAusgabe.h</p>
<pre><code class="language-cpp">#ifndef PERSONAUSGABE_HEADER
#define PERSONAUSGABE_HEADER

class Person;

void Print(
  Person const &amp; person);

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

void Print(
  Person const &amp; person)
{
  std::cout &lt;&lt; &quot;Vorname  : &quot; &lt;&lt; person.GetName() &lt;&lt; &quot;\n&quot;
            &lt;&lt; &quot;Nachname : &quot; &lt;&lt; person.GetNachname() &lt;&lt; &quot;\n&quot;
            &lt;&lt; &quot;Alter    : &quot; &lt;&lt; person.GetAlter() &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>// main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Person.h&quot;
#include &quot;PersonAusgabe.h&quot;

int main()
{
  Person jemand(&quot;Vorname&quot;, &quot;Nachname&quot;, 28);
  Print(jemand);

  std::cout &lt;&lt; &quot;Weiter mit beliebigen Taste...&quot;;
  std::cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1564573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564573</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 14 Aug 2008 09:58:58 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Thu, 14 Aug 2008 10:18:26 GMT]]></title><description><![CDATA[<p>ja, das sieht echt profi mässig aus, danke danke. jetzt weiss ich wie ich das ganze am beste unterbringen kan <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>
<p>apropo const, wenn die werte aucvh mal verändert werden sollen darf ich dann const nicht mehr anwenden stimmts ?</p>
<p>bitte alles erstmal ohne zeiger <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="😕"
    /></p>
<p>noch ein fehler gefunden, man darf doch nicht zig mal iosream includen oder ? <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/1564580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564580</guid><dc:creator><![CDATA[rumcajs007]]></dc:creator><pubDate>Thu, 14 Aug 2008 10:18:26 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Thu, 14 Aug 2008 10:37:42 GMT]]></title><description><![CDATA[<p>Hi,<br />
also zu der const geschichte. Const verwendet man ja hauptsächlich um zu zeigen, ob in einem code eine variable geändert wird oder was genau da passiert (viel übersichtlicher).</p>
<p>Es gibt const variablen, die einen festen wert haben und dann gibt es aber auch const zeiger, das ist dann sowas wie eine referenz, sprich ein const zeiger muss immer auf etwas zeigen, der kann nie auf NULL.</p>
<p>Den &quot;iostream&quot; musst du da includen wo er notwendig ist. Wenn deine Klasse mit dem &quot;iostream&quot; arbeitet wird dieser in der header datei der Klasse 1x inkludiert.</p>
<p>Gruß Andy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564597</guid><dc:creator><![CDATA[Andy2211]]></dc:creator><pubDate>Thu, 14 Aug 2008 10:37:42 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt in C++ on Thu, 14 Aug 2008 12:52:22 GMT]]></title><description><![CDATA[<p>rumcajs007 schrieb:</p>
<blockquote>
<p>ja, das sieht echt profi mässig aus, danke danke. jetzt weiss ich wie ich das ganze am beste unterbringen kan <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>
</blockquote>
<p>Ich will nicht sagen das es unbedingt das Optimum ist, aber es ist mit Sicherheit eine sauberer Alternative, zumal du dir Zeiger sparst (Und C-Arrays haben mit Zeigern nicht grade wenig zu tun).</p>
<p>rumcajs007 schrieb:</p>
<blockquote>
<p>apropo const, wenn die werte aucvh mal verändert werden sollen darf ich dann const nicht mehr anwenden stimmts ?</p>
</blockquote>
<p>Also eine Kurzzusammenfassung dessen, was ich im Code mit const abbilde, und vielleicht noch eine erklärung warum ich this verwende, und was es bedeutet.</p>
<pre><code class="language-cpp">// Diese Methode modifiziert keine Werte innerhalb der Klasse. Dies kann (und sollte man)
// mit const hinter der Parameterliste signalisieren. Das hat den Vorteil, das diese Methode
// Auch auf konstante Objekte angewendet werden kann (Thema: &quot;const correctness&quot;)
std::string Person::GetVorname() const
{
  return vorname;
}

// Für diese Methode trennen wir mal mehrere Aspekte:
// 1. std::string const &amp; vorname
//    Alternative Schreibweise: const std::string &amp; vorname
//    Ich weiß nicht in wie weit du dich mit Referenzen auskennst. Grundsätzlich gibt es mehrere
//    Formen wie man Variablen übergeben kann, ich zeige hier mal die 3 Varianten ohne Zeiger auf:
//    a) Call-by-Value
//      void Person::SetVorname(std::string vorname);
//      =&gt; Hier wird der übergebene Wert kopiert. Dies ist bei den Basisdatentypen wie
//         int, short, float... meist das Optimum, bei Objekten sollte man unnötige Kopien aber
//         vermeiden. Eine Änderung an der Kopie betrifft den Originalwert nicht.
//    b) Call-by-Reference
//      void Person::SetVorname(std::string &amp; vorname);
//      =&gt; Referenzen sind sogenannte Aliasnamen. Das heißt, das du hier auf den Originalobjekt arbeitest,
//         das der Funktion übergeben wurde. Würdest du diesen Wert ändern, würde er auch an
//         der Stelle des Aufrufes geändert werden, da du wie gesagt auf ein und den selben Objekt
//         arbeitest.
//         Referenzen solltest du immer einsetzen wenn du einen Übergebenen Wert manipulieren willst,
//         und diesen nicht als Rückgabewert übergibst.
//    c) Call-by-Const-Reference
//      void Person::SetVorname(std::string &amp; vorname);
//      =&gt; Wie bei b, du arbeitest also mit dem Original, nur das du dieses nicht verändern darfst.
//         Diese Übergabe solltest du bei allen Objektübergaben verwenden, wenn der Wert nicht
//         manipuliert werden soll (Dies ist meist der Regelfall).
// 2. this-&gt;vorname = vorname
//    Dir ist vielleicht aufgefallen das bei mir die Membervariable genauso heißt wie der
//    Übergabeparameter. Ich mag es nicht gekünstelte Namen zu verwenden nur um dieses Problem zu
//    umgehen. Wie kann ich aber nun zwischen den beiden Unterscheiden?
//    Grundsätzlich haben lokale Variablen immer Vorrang (Ein Parameter ist hier wie eine lokale
//    Variable anzusehen. Wenn ich also nur &quot;vorname&quot; schreibe, beziehe ich mich hier auf den
//    Parameter. Der this-Zeiger verweist auf das aktuelle Objekt, und darüber kann ich immer
//    auf die Membervariable verweisen. Sprich: &quot;this-&gt;vorname = vorname&quot; bedeutet, das
//    ich die lokale Variable &quot;vorname&quot; der Membervariable &quot;vorname&quot; zuweise.
void Person::SetVorname(
  std::string const &amp; vorname)
{
  this-&gt;vorname = vorname;
}
</code></pre>
<p>rumcajs007 schrieb:</p>
<blockquote>
<p>bitte alles erstmal ohne zeiger <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="😕"
    /></p>
</blockquote>
<p>Wo sind bitte Zeiger in meinen Code? (Wenn man mal von this absieht, und der verweist einfach nur auf das aktuelle Element; und ich hoffe diesen nun gut beschrieben zu haben.</p>
<p>rumcajs007 schrieb:</p>
<blockquote>
<p>noch ein fehler gefunden, man darf doch nicht zig mal iosream includen oder ? <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>
</blockquote>
<p>Wieso nicht. Dazu gibt es die &quot;Includeguards&quot; (gleich dazu mehr) im Header. Dir fallen vielleicht in meinen Header die Makros auf? Dies sind die Includeguards. Ein Includeguard verhindert das Header mehrfach abgearbeitet werden. Es ist sogar guter Stil wenn man immer sieht was eine Datei verwendet, und nicht Includes in anderen Headern versteckt. Zudem sollte man immer (sofern möglich) Includes in den Source, nicht in den Header legen.</p>
<p>Thema Includeguard:</p>
<pre><code class="language-cpp">// Headerdatei
#ifndef EINDEUTIGERNAME // Dieser Name ist eindeutig zu benennen!
#define EINDEUTIGERNAME

// &lt;-- Hier der eigentliche inhalt

#define
</code></pre>
<p>Wenn du so Header schreibst (und wirklich eindeutige Bezeichner wählst), kannst du einen Header nahezu beliebig includieren. Das einzige was du so nicht auflösen kannst, sind gegenseitige Abhängigkeiten (Hier google im Zweifel nach &quot;forward declaration&quot; oder &quot;Vorwärtsdeklaration&quot;).</p>
<p>cu André<br />
P.S: Link zu <a href="http://www.parashift.com/c++-faq-lite/const-correctness.html" rel="nofollow">&quot;const correctness&quot;</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564715</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 14 Aug 2008 12:52:22 GMT</pubDate></item></channel></rss>