<?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[Klassen als Datenelemente]]></title><description><![CDATA[<p>Hallo, ich bin am verzweifeln. Ich versuche C++ zu lernen und habe ein C++ Buch von Jesse Liberty (C++ in 21 Tagen). Nun bin ich bei Kapitel 6 angelangt, wo die Klassen angesprochen werden. Verstehe auch was eine einfache Klasse ist und wie man sie aus main() anspricht. Nun kommt ein Programmbespiel welches absolut nicht wirklich erklärt wird und ich will nicht weiter lesen bevor ich dieses nicht bgriffen habe. Kann mir bitte jemand in einfachen Worten erklären was es mit dem Programm auf sich hat. Ich verstehe die Sache Point in Rectangle einfach nicht. Es sieht für mich wie eine Instanz aus, aber wie funktioniert das alles.</p>
<pre><code class="language-cpp">// Beginn von Rect.hpp
 #include &lt;iostream.h&gt;
 class Point // nimmt X,Y-Koordinaten auf
 {
 // Kein Konstruktor, Standardkonstruktor verwenden
 public:
 void SetX(int x) { itsX = x; }
 void SetY(int y) { itsY = y; }
 int GetX()const { return itsX;}
 int GetY()const { return itsY;}
 private:
 int itsX;
 int itsY;
 }; // Ende der Klassendeklaration von Point

 class Rectangle
 {
 public:
 Rectangle (int top, int left, int bottom, int right);
 ~Rectangle () {}

 int GetTop() const { return itsTop; }
 int GetLeft() const { return itsLeft; }
 int GetBottom() const { return itsBottom; }
 int GetRight() const { return itsRight; }

 Point GetUpperLeft() const { return itsUpperLeft; }
 Point GetLowerLeft() const { return itsLowerLeft; }
 Point GetUpperRight() const { return itsUpperRight; }
 Point GetLowerRight() const { return itsLowerRight; }

 void SetUpperLeft(Point Location) {itsUpperLeft = Location;}
 void SetLowerLeft(Point Location) {itsLowerLeft = Location;}
 void SetUpperRight(Point Location) {itsUpperRight = Location;}
 void SetLowerRight(Point Location) {itsLowerRight = Location;}

 void SetTop(int top) { itsTop = top; }
 void SetLeft (int left) { itsLeft = left; }
 void SetBottom (int bottom) { itsBottom = bottom; }
 void SetRight (int right) { itsRight = right; }

 int GetArea() const;

 private:
 Point itsUpperLeft;
 Point itsUpperRight;
 Point itsLowerLeft;
 Point itsLowerRight;
 int itsTop;
 int itsLeft;
 int itsBottom;
 int itsRight;
 };
 // Ende von Rect.hpp
</code></pre>
<p>Listing 6.9: RECT.CPP</p>
<pre><code class="language-cpp">// Beginn von rect.cpp
 #include &quot;rect.hpp&quot;
 Rectangle::Rectangle(int top, int left, int bottom, int right)
 {
 itsTop = top;
 itsLeft = left;
 itsBottom = bottom;
 itsRight = right;

 itsUpperLeft.SetX(left);
 itsUpperLeft.SetY(top);

 itsUpperRight.SetX(right);
 itsUpperRight.SetY(top);

 itsLowerLeft.SetX(left);
 itsLowerLeft.SetY(bottom);

 itsLowerRight.SetX(right);
 itsLowerRight.SetY(bottom);
 }

 // Rechteckflaeche berechnen. Dazu Ecken bestimmen,
 // Breite und Hoehe ermitteln, dann multiplizieren.
 int Rectangle::GetArea() const
 {
 int Width = itsRight-itsLeft;
 int Height = itsTop - itsBottom;
 return (Width * Height);
 }

 int main()
 {
 // Eine lokale Rectangle-Variable initialisieren
 Rectangle MyRectangle (100, 20, 50, 80 );

 int Area = MyRectangle.GetArea();

 cout &lt;&lt; &quot;Flaeche: &quot; &lt;&lt; Area &lt;&lt; &quot;\n&quot;;
 cout &lt;&lt; &quot;Obere linke X-Koordinate: &quot;;
 cout &lt;&lt; MyRectangle.GetUpperLeft().GetX();
 return 0;
 }
</code></pre>
<p>Vielen Dank für eure Hilfe.</p>
<p>Gruß Mickes</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245631/klassen-als-datenelemente</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 08:40:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245631.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Jul 2009 13:23:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 13:32:02 GMT]]></title><description><![CDATA[<p>Hallo, ich bin am verzweifeln. Ich versuche C++ zu lernen und habe ein C++ Buch von Jesse Liberty (C++ in 21 Tagen). Nun bin ich bei Kapitel 6 angelangt, wo die Klassen angesprochen werden. Verstehe auch was eine einfache Klasse ist und wie man sie aus main() anspricht. Nun kommt ein Programmbespiel welches absolut nicht wirklich erklärt wird und ich will nicht weiter lesen bevor ich dieses nicht bgriffen habe. Kann mir bitte jemand in einfachen Worten erklären was es mit dem Programm auf sich hat. Ich verstehe die Sache Point in Rectangle einfach nicht. Es sieht für mich wie eine Instanz aus, aber wie funktioniert das alles.</p>
<pre><code class="language-cpp">// Beginn von Rect.hpp
 #include &lt;iostream.h&gt;
 class Point // nimmt X,Y-Koordinaten auf
 {
 // Kein Konstruktor, Standardkonstruktor verwenden
 public:
 void SetX(int x) { itsX = x; }
 void SetY(int y) { itsY = y; }
 int GetX()const { return itsX;}
 int GetY()const { return itsY;}
 private:
 int itsX;
 int itsY;
 }; // Ende der Klassendeklaration von Point

 class Rectangle
 {
 public:
 Rectangle (int top, int left, int bottom, int right);
 ~Rectangle () {}

 int GetTop() const { return itsTop; }
 int GetLeft() const { return itsLeft; }
 int GetBottom() const { return itsBottom; }
 int GetRight() const { return itsRight; }

 Point GetUpperLeft() const { return itsUpperLeft; }
 Point GetLowerLeft() const { return itsLowerLeft; }
 Point GetUpperRight() const { return itsUpperRight; }
 Point GetLowerRight() const { return itsLowerRight; }

 void SetUpperLeft(Point Location) {itsUpperLeft = Location;}
 void SetLowerLeft(Point Location) {itsLowerLeft = Location;}
 void SetUpperRight(Point Location) {itsUpperRight = Location;}
 void SetLowerRight(Point Location) {itsLowerRight = Location;}

 void SetTop(int top) { itsTop = top; }
 void SetLeft (int left) { itsLeft = left; }
 void SetBottom (int bottom) { itsBottom = bottom; }
 void SetRight (int right) { itsRight = right; }

 int GetArea() const;

 private:
 Point itsUpperLeft;
 Point itsUpperRight;
 Point itsLowerLeft;
 Point itsLowerRight;
 int itsTop;
 int itsLeft;
 int itsBottom;
 int itsRight;
 };
 // Ende von Rect.hpp
</code></pre>
<p>Listing 6.9: RECT.CPP</p>
<pre><code class="language-cpp">// Beginn von rect.cpp
 #include &quot;rect.hpp&quot;
 Rectangle::Rectangle(int top, int left, int bottom, int right)
 {
 itsTop = top;
 itsLeft = left;
 itsBottom = bottom;
 itsRight = right;

 itsUpperLeft.SetX(left);
 itsUpperLeft.SetY(top);

 itsUpperRight.SetX(right);
 itsUpperRight.SetY(top);

 itsLowerLeft.SetX(left);
 itsLowerLeft.SetY(bottom);

 itsLowerRight.SetX(right);
 itsLowerRight.SetY(bottom);
 }

 // Rechteckflaeche berechnen. Dazu Ecken bestimmen,
 // Breite und Hoehe ermitteln, dann multiplizieren.
 int Rectangle::GetArea() const
 {
 int Width = itsRight-itsLeft;
 int Height = itsTop - itsBottom;
 return (Width * Height);
 }

 int main()
 {
 // Eine lokale Rectangle-Variable initialisieren
 Rectangle MyRectangle (100, 20, 50, 80 );

 int Area = MyRectangle.GetArea();

 cout &lt;&lt; &quot;Flaeche: &quot; &lt;&lt; Area &lt;&lt; &quot;\n&quot;;
 cout &lt;&lt; &quot;Obere linke X-Koordinate: &quot;;
 cout &lt;&lt; MyRectangle.GetUpperLeft().GetX();
 return 0;
 }
</code></pre>
<p>Vielen Dank für eure Hilfe.</p>
<p>Gruß Mickes</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744231</guid><dc:creator><![CDATA[Mickes]]></dc:creator><pubDate>Thu, 16 Jul 2009 13:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 13:25:13 GMT]]></title><description><![CDATA[<p>Nimm C++ Tags...<br />
Ganz links direkt unter den Smilies ist da ne ganz große Schaltfläche...<br />
Dann brauchst du auch nicht die Zeilennummern selbst mit eintippen und vll würde es dann wer lesen können und sich das ganze auch mal angucken ;P</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744235</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 16 Jul 2009 13:25:13 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 13:33:54 GMT]]></title><description><![CDATA[<p>Benutze bitte die [cpp]-Tags für C++-Code.</p>
<p>Wenn ich dein Problem mit &quot;der Sache Point in Rectangle&quot; richtig verstanden habe ist das recht einfach: so wie ein Punkt 2 Elemente vom Typ int hat, hat ein Viereck 4 Elemente vom Typ Point und 4 Elemente vom Typ int. Wie du dem Code entnehmen kannst ist im Rechteck jede Information dreifach vorhanden: Die X-Koordinate der linken Rechteckseite ist sowohl direkt in <code>itsLeft[/i] als auch indirekt in den X-Koordinaten der beiden linken Eckpunkte ([c]itsUpperLeft</code> und <code>itsLowerLeft</code> gespeichert. Ähnliches gilt auch für die anderen drei Seiten.</p>
<p>Im übrigen scheint dein Buch schon etwas älter zu sein. Der Header &lt;iostream.h&gt; ist seit ca. 11 Jahren veraltet. Ich selber kann dazu nichts sagen, allerdings wurde hier schon des Öfteren erzählt, dass <em>C++ in 21 Tagen</em> ein recht schlechtes Buch sei.</p>
<p>Empfohlen wird allgemein der <em>C++ Primer</em> und <em>Thinking in C++</em>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744240</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 16 Jul 2009 13:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 14:35:08 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnelle Reaktion. Ich taste mich so langsam an die Sache heran und habe festgestellt, dass die Zeilen 33 - 36 ind der Rect.hpp keinerlei Bedeutung haben und ich sie streichen kann. Das macht die Sache schon etwas übersichtlicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744320</guid><dc:creator><![CDATA[Mickes]]></dc:creator><pubDate>Thu, 16 Jul 2009 14:35:08 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 14:43:48 GMT]]></title><description><![CDATA[<p>Autsch!</p>
<pre><code class="language-cpp">// Beginn von Rect.hpp
 class Point // gehört in die Point.hpp
 {
 // Kein Konstruktor, Standardkonstruktor verwenden //Schlecht. Konstruktor macht Kontruktionen doch viel leichter. 
 public:
 void SetX(int x) { itsX = x; } //Getter UND Setter public? Dann mach doch gleich ne struct
 void SetY(int y) { itsY = y; } //Getter UND Setter public? Dann mach doch gleich ne struct
 int GetX()const { return itsX;} //Getter UND Setter public? Dann mach doch gleich ne struct
 int GetY()const { return itsY;} //Getter UND Setter public? Dann mach doch gleich ne struct
 private: //aber hier private, helau!
 int itsX;
 int itsY;
 }; // Ende der Klassendeklaration von Point

 class Rectangle
 {
 public:
 Rectangle (int top, int left, int bottom, int right);//ok
 ~Rectangle () {} //nutzlos

 int GetTop() const { return itsTop; } //alle vier nutzlos
 int GetLeft() const { return itsLeft; }
 int GetBottom() const { return itsBottom; }
 int GetRight() const { return itsRight; }

 Point GetUpperLeft() const { return itsUpperLeft; } //alle vier schlecht
 Point GetLowerLeft() const { return itsLowerLeft; }
 Point GetUpperRight() const { return itsUpperRight; }
 Point GetLowerRight() const { return itsLowerRight; }

 void SetUpperLeft(Point Location) {itsUpperLeft = Location;} //alle vier nutzlos
 void SetLowerLeft(Point Location) {itsLowerLeft = Location;}
 void SetUpperRight(Point Location) {itsUpperRight = Location;}
 void SetLowerRight(Point Location) {itsLowerRight = Location;}

 void SetTop(int top) { itsTop = top; } //alle vier schlecht
 void SetLeft (int left) { itsLeft = left; }
 void SetBottom (int bottom) { itsBottom = bottom; }
 void SetRight (int right) { itsRight = right; }

 int GetArea() const; //braucht man das?

 private:
 Point itsUpperLeft; //alle vier extrem schei
 Point itsUpperRight;
 Point itsLowerLeft;
 Point itsLowerRight;

 int itsTop; //die hier reichen, die expunkte können immer &quot;berechnet&quot; werden
 int itsLeft;
 int itsBottom;
 int itsRight;
 };
 // Ende von Rect.hpp
</code></pre>
<p>[/cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744329</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 16 Jul 2009 14:43:48 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 14:49:53 GMT]]></title><description><![CDATA[<p>Was Pumuckl sagt ist richtig problematisch. Denn dieses mehrfache halten der einzelnen Daten birgt wahnsinniges Fehlerpotential, und die Klasse macht richtig gut Gebrauch von den Fehlern!<br />
z.B.:</p>
<pre><code class="language-cpp">void SetUpperLeft(Point Location) {itsUpperLeft = Location;}
</code></pre>
<p>Hier wird nur ein neuer Punkt für links oben gesetzt. Ignoriert werden top, left und topRight. Denn für all diese Werte wird dich auch etwas ändern.<br />
Oder aber die Klasse modelliert kein Rechteck sondern ein Viereck, und auch da gibt es Fehler in der Implementierung, z.B. die GetArea sieht sicher nicht mehr so leicht aus. Denn für ein beliebiges Viereck gilt nicht mehr flaeche = hoehe*breite.</p>
<p>Ein Rechteck wird definiert durch zwei Punkte, die auf einer der Diagonalen liegen, also z.B. topLeft und bottomRight. Mehr Member braucht die Klasse Rectangle nicht. Daraus bekommt man alle Infos.<br />
Beim Setzen von einer der Ecken muss man halt aufpassen, ob sich z.B. bottomRight in bottomLeft ändert, wenn man ein neues topLeft setzt, welches aber ein p.x &gt; bottomRight.x hat.</p>
<p>Langer Rede kurzer Sinn, wenn das 1:1 aus dem Buch abgeschrieben ist, würde ich das dem Verlag zurückschicken <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="😃"
    /> Denn solche hammer logischen Fehler gehören nicht in ein Buch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744332</guid><dc:creator><![CDATA[TooMuchText]]></dc:creator><pubDate>Thu, 16 Jul 2009 14:49:53 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 14:55:01 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@Volkard</a><br />
Und was haben sich die Qt Leute dabei gedacht? Getter, Setter <strong>UND</strong> Referenz!<br />
<a href="http://doc.trolltech.com/4.3/qpoint.html" rel="nofollow">http://doc.trolltech.com/4.3/qpoint.html</a><br />
Ist es vielleicht doch nur geschmackssache ob man das Zeug public macht oder nicht unabdingbare Funktionen einbaut? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1744335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744335</guid><dc:creator><![CDATA[Hossenscheisser]]></dc:creator><pubDate>Thu, 16 Jul 2009 14:55:01 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 14:57:37 GMT]]></title><description><![CDATA[<p>Also, da die Frage war, was das genau ist, und nicht, warum es ziemlich schlecht gemacht ist, fasse ich mal kurz zusammen:<br />
Klasse Punkt:<br />
- X- und Y-Wert (int)<br />
- Getter und Setter für X- und Y-Wert (Funktionen, über die man den Wert erfahren und zuweisen kann, da die eigentlichen Variablen ja private sind (dass das allerdings keinen Sinn macht, wurde ja schon gesagt))</p>
<p>Klasse Rechteck:<br />
- 4 Objekte der Klasse Punkt, die die vier Eckpunkte darstellen sollen.<br />
- Werte für oben unten rechts und links<br />
- Getter und Setter für alle Eigenschaften.</p>
<p>Das Buch würde ich übrigens verbrennen. Wenn das so da drin steht, ist es nicht nur veraltet sondern auch schlecht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744339</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Thu, 16 Jul 2009 14:57:37 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 15:07:07 GMT]]></title><description><![CDATA[<p>wx++ schrieb:</p>
<blockquote>
<p>Klasse Punkt:<br />
- X- und Y-Wert (int)<br />
- Getter und Setter für X- und Y-Wert (Funktionen, über die man den Wert erfahren und zuweisen kann, da die eigentlichen Variablen ja private sind (dass das allerdings keinen Sinn macht, wurde ja schon gesagt))</p>
</blockquote>
<p>Und fehlender Point-Konstruktor.<br />
Den braucht man.</p>
<pre><code class="language-cpp">Point Rectangle::getTopLeft()
{
  return Point(left,top);
}
</code></pre>
<p>die andere version mit Point-Anlegen, Daten-Reinschreiben, return will glaub ich keiner haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744345</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 16 Jul 2009 15:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 15:08:16 GMT]]></title><description><![CDATA[<p>Hossenscheisser schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@Volkard</a><br />
Und was haben sich die Qt Leute dabei gedacht? Getter, Setter <strong>UND</strong> Referenz!<br />
<a href="http://doc.trolltech.com/4.3/qpoint.html" rel="nofollow">http://doc.trolltech.com/4.3/qpoint.html</a><br />
Ist es vielleicht doch nur geschmackssache ob man das Zeug public macht oder nicht unabdingbare Funktionen einbaut? <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>Vielleicht haben die Leute nur zu viel Kaffe getrunken. Das vermag ich nicht zu beurteilen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744351</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 16 Jul 2009 15:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 15:16:46 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Hossenscheisser schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@Volkard</a><br />
Und was haben sich die Qt Leute dabei gedacht? Getter, Setter <strong>UND</strong> Referenz!<br />
<a href="http://doc.trolltech.com/4.3/qpoint.html" rel="nofollow">http://doc.trolltech.com/4.3/qpoint.html</a><br />
Ist es vielleicht doch nur geschmackssache ob man das Zeug public macht oder nicht unabdingbare Funktionen einbaut? <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>Vielleicht haben die Leute nur zu viel Kaffe getrunken. Das vermag ich nicht zu beurteilen.</p>
</blockquote>
<p>Ich mache es ehrlich gesagt auch ganz gerne so, weil durch setter/getter kannst du später gut erweitern (auch wenn er am Anfang noch leer ist) ohne 500mio punkt.x in punkt.getX() umbenennen zu müssen ...<br />
Zudem ist sind Referenzen ganz nett, wenn du sowas machen willst:</p>
<pre><code class="language-cpp">template&lt;typename Typ&gt;
class liste
{
   Typ* anfang;
   //den rest kennst du ja...
}

class wurstkuchen //bla ...
class apfelblutsuppe : public wurstkuchen //bla ...

class basis
{
   liste&lt;wurstkuchen&gt; m_liste;
public:
    liste&lt;wurstkuchen&gt;&amp; liste() { return m_liste; }
};

class derivat
{
   //Unter vorraussetzung dass factory auch apfelblutsuppe herstellt:
   liste&lt;apfelblutsuppe&gt;&amp; liste() { 
         return *( (liste&lt;apfelblutsuppe&gt;*)(&amp;liste&lt;wurstkuchen&gt;) );
   }
};
</code></pre>
<p>Nur wie man richtig castet weiß ich noch nicht. :p</p>
<p>Bitte zerlege es wenn du dich dazu veranlasst siehst! <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/1744366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744366</guid><dc:creator><![CDATA[Hossenscheisser]]></dc:creator><pubDate>Thu, 16 Jul 2009 15:16:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 15:18:02 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Hossenscheisser schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@Volkard</a><br />
Und was haben sich die Qt Leute dabei gedacht? Getter, Setter <strong>UND</strong> Referenz!<br />
<a href="http://doc.trolltech.com/4.3/qpoint.html" rel="nofollow">http://doc.trolltech.com/4.3/qpoint.html</a><br />
Ist es vielleicht doch nur geschmackssache ob man das Zeug public macht oder nicht unabdingbare Funktionen einbaut? <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>Vielleicht haben die Leute nur zu viel Kaffe getrunken. Das vermag ich nicht zu beurteilen.</p>
</blockquote>
<p>Nö, die wollen einfach binärkompatibel bleiben. Und Hinzufügen von Membern bricht die Binärkompatibilität. Drum setzen die Qtsoftwareler über die ganze Bibliothek hinweg auf Pimpl. Und das geht schlecht mit einem struct, der in so vielen Bereichen des Frameworks auftaucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744368</guid><dc:creator><![CDATA[Kumpane]]></dc:creator><pubDate>Thu, 16 Jul 2009 15:18:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 15:21:25 GMT]]></title><description><![CDATA[<p>Kumpane schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Hossenscheisser schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@Volkard</a><br />
Und was haben sich die Qt Leute dabei gedacht? Getter, Setter <strong>UND</strong> Referenz!<br />
<a href="http://doc.trolltech.com/4.3/qpoint.html" rel="nofollow">http://doc.trolltech.com/4.3/qpoint.html</a><br />
Ist es vielleicht doch nur geschmackssache ob man das Zeug public macht oder nicht unabdingbare Funktionen einbaut? <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>Vielleicht haben die Leute nur zu viel Kaffe getrunken. Das vermag ich nicht zu beurteilen.</p>
</blockquote>
<p>Nö, die wollen einfach binärkompatibel bleiben. Und Hinzufügen von Membern bricht die Binärkompatibilität. Drum setzen die Qtsoftwareler über die ganze Bibliothek hinweg auf Pimpl. Und das geht schlecht mit einem struct, der in so vielen Bereichen des Frameworks auftaucht.</p>
</blockquote>
<p>Wie ist Binärkompatibilität denn in diesem Zusammenhang zu verstehen? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1744371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744371</guid><dc:creator><![CDATA[Samsn]]></dc:creator><pubDate>Thu, 16 Jul 2009 15:21:25 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 19:06:26 GMT]]></title><description><![CDATA[<p>Samsn schrieb:</p>
<blockquote>
<p>Wie ist Binärkompatibilität denn in diesem Zusammenhang zu verstehen? <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>Weil wenn irgendwann einem einfällt, eine QPoint-Klasse braucht ein neues Member element, dann ändert das Hinzufügen die ABI. Programme, die mit der alten Version kompiliert wurden, sind dann nicht mehr lauffähig. Es ist einfach Vorsicht und Voraussicht. Man findet in dem Qt-Framework öffentlich zugänglich nur Klassen, keine Structs.</p>
<p>Meiner Info nach gab es nur ein einziges Mal Probleme mit ABI-Änderungen, das war nur auf Mac, um Widgets auf GraphicsView zu ermöglichen. Diese Sturheit hat sich also bezahlt gemacht <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/1744480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744480</guid><dc:creator><![CDATA[Kumpane]]></dc:creator><pubDate>Thu, 16 Jul 2009 19:06:26 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 21:36:56 GMT]]></title><description><![CDATA[<p>Vielen Dank für diese überaus vielen Antworten, ich bin überwältigt, auch wenn ich einige Sachen noch nicht ganz nachvollziehen kann was es jetzt mit Qt auf sich hat. Aber ich denke anhand der vielen Kommentare werde ich es schaffen^^.</p>
<p>Vielen Dank für eure enorme Hilfe.<br />
Mickes</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744530</guid><dc:creator><![CDATA[Mickes]]></dc:creator><pubDate>Thu, 16 Jul 2009 21:36:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 21:41:11 GMT]]></title><description><![CDATA[<p>Das mit Qt hatte jetzt nichts konkret mit dir zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744532</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Thu, 16 Jul 2009 21:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 21:43:20 GMT]]></title><description><![CDATA[<p>Übrigens habe dieses Buch auch als Ebook gefunden und die Sache mit den Klassen steht hier: <a href="http://www.informit.de/books/c++21/data/kap06.htm#76988" rel="nofollow">http://www.informit.de/books/c++21/data/kap06.htm#76988</a> , das ganze Buch unter <a href="http://www.informit.de/books/c++21/data/start.htm" rel="nofollow">http://www.informit.de/books/c++21/data/start.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744533</guid><dc:creator><![CDATA[Mickes]]></dc:creator><pubDate>Thu, 16 Jul 2009 21:43:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Thu, 16 Jul 2009 22:05:16 GMT]]></title><description><![CDATA[<p>Und vielen Dank an Volkard, dass er den Source dokumentiert hat. Durch das streichen von noch einem Viererblock macht die Sache jetzt einen Sinn. Hatte mich da ziehmlich verwirren lassen durch die Zeilen, die nichts im Programm zu suchen haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744551</guid><dc:creator><![CDATA[Mickes]]></dc:creator><pubDate>Thu, 16 Jul 2009 22:05:16 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Fri, 17 Jul 2009 06:08:09 GMT]]></title><description><![CDATA[<p>Resume betrachtet lautet der Source ja dann:</p>
<p>Rect.hpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;
class Point     // nimmt X,Y-Koordinaten auf
{
   // Kein Konstruktor, Standardkonstruktor verwenden
   public:
      void SetX(int x) { itsX = x; }
      void SetY(int y) { itsY = y; }
      int GetX()const { return itsX;}
      int GetY()const { return itsY;}
   private:
      int itsX;
      int itsY;
};    // Ende der Klassendeklaration von Point

class  Rectangle
{
   public:
      Rectangle (int top, int left, int bottom, int right);
      ~Rectangle () {}

      Point  GetUpperLeft() const { return itsUpperLeft; }
      Point  GetLowerLeft() const { return itsLowerLeft; }
      Point  GetUpperRight() const { return itsUpperRight; }
      Point  GetLowerRight() const { return itsLowerRight; }

      void SetTop(int top) { itsTop = top; }
      void SetLeft (int left) { itsLeft = left; }
      void SetBottom (int bottom) { itsBottom = bottom; }
      void SetRight (int right) { itsRight = right; }

      int GetArea() const;

   private:
      Point  itsUpperLeft;
      Point  itsUpperRight;
      Point  itsLowerLeft;
      Point  itsLowerRight;
      int    itsTop;
      int    itsLeft;
      int    itsBottom;
      int    itsRight;
};
// Ende von Rect.hpp
</code></pre>
<p>Main.cpp</p>
<pre><code class="language-cpp">#include &quot;rect.hpp&quot;
Rectangle::Rectangle(int top, int left, int bottom, int right)
{
      itsTop = top;
      itsLeft = left;
      itsBottom = bottom;
      itsRight = right;

      itsUpperLeft.SetX(left);
      itsUpperLeft.SetY(top);

      itsUpperRight.SetX(right);
      itsUpperRight.SetY(top);

      itsLowerLeft.SetX(left);
      itsLowerLeft.SetY(bottom);

      itsLowerRight.SetX(right);
      itsLowerRight.SetY(bottom);
}

// Rechteckfläche berechnen. Dazu Ecken bestimmen,
// Breite und Höhe ermitteln, dann multiplizieren.
int Rectangle::GetArea() const
{
      int Width = itsRight-itsLeft;
      int Height = itsTop - itsBottom;
      return (Width * Height);
}

int main()
{
      // Eine lokale Rectangle-Variable initialisieren
      Rectangle MyRectangle (100, 20, 50, 80 );

      int Area = MyRectangle.GetArea();

      cout &lt;&lt; &quot;Flaeche: &quot; &lt;&lt; Area &lt;&lt; &quot;\n&quot;;
      cout &lt;&lt; &quot;Obere linke X-Koordinate: &quot;;
      cout &lt;&lt; MyRectangle.GetUpperLeft().GetX();
    return 0;
</code></pre>
<p>Wenn ich es richtig sehe, werden in Klasse 2 vier Instanzen &quot;itsUpperLeft, itsUpperRight...&quot; angelegt. Die einzelnen x,y Punkte werden durch die Rectangel-Instanz in main initialisiert und später kann man in main mit</p>
<pre><code>MyRectangle.GetUpperLeft().GetX()
</code></pre>
<p>die Sachen wieder abrufen.</p>
<p>Was mir noch Fragen auf gibt ist die Zeile</p>
<pre><code>Point  GetUpperLeft() const { return itsUpperLeft; }
</code></pre>
<p>.</p>
<p>Was passiert in dieser Zeile? Wirde da ein interner Zeiger auf die Instanz itsUpperLeft zurückgegeben, da ich sonst ja nicht drauf zu greifen kann da sie privat ist? Und warum steht dann selber Point davor? Es sieht aus wie eine eigene Instanz GetUpperLeft(), aber es ist ja eine Funktion <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Und warum kann ich nicht aus main heraus</p>
<pre><code>MyRectangle.GetUpperLeft().SetX()
</code></pre>
<p>schreiben und mit</p>
<pre><code>MyRectangle.GetUpperLeft().GetX()
</code></pre>
<p>wieder abrufen, da kommt Müll raus?</p>
<p>Vieleicht kann da noch mal jemand etwas zu sagen <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>Vielen Dank<br />
Mickes</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744599</guid><dc:creator><![CDATA[Mickes]]></dc:creator><pubDate>Fri, 17 Jul 2009 06:08:09 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Fri, 17 Jul 2009 06:20:53 GMT]]></title><description><![CDATA[<p><code>GetUpperLeft()</code> hat den Rückgabetypen <code>Point</code> . Da dort weder ein * noch ein &amp; vorhanden ist (also weder Zeiger noch Referenz), wird die Instanz kopiert. Das impliziert natürlich, dass du beim Zugriff nicht mehr auf die linke obere Ecke der Klasse selbst zugreifst, sondern auf eine Kopie davon. Dadurch haben Änderungen daran keinen Effekt auf das ursprüngliche Objekt, bei dem man <code>GetUpperLeft()</code> aufgerufen hat.</p>
<p>Weil <code>GetUpperLeft()</code>  <code>const</code> ist, sieht man auch, dass man über den Aufruf dieser Memberfunktion das Objekt nicht verändern kann.</p>
<p>Um direkt auf dem Objekt zu arbeiten, kannst du Referenzen zurückgeben, allerdings darf die Memberfunktion dann nicht mehr <code>const</code> -qualifiziert sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744602</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Jul 2009 06:20:53 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Datenelemente on Sat, 18 Jul 2009 17:55:44 GMT]]></title><description><![CDATA[<p>So, habe mir jetzt auf Ebay das Buch C++ Primer, Aufl. 2007 für 10 Euro ersteigert und fange die Sache nochmal von Vorne an. Das Buch C++ in 21 Tagen werde ich als Erfahrungswert in die Ablage legen. Denke das macht Sinn. Trotzdem, vielen Dank für eure Hilfe.</p>
<p>Gruß<br />
Mickes</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1745444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1745444</guid><dc:creator><![CDATA[Mickes]]></dc:creator><pubDate>Sat, 18 Jul 2009 17:55:44 GMT</pubDate></item></channel></rss>