<?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[Vollständiges Objekt]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe hier ein Programmbeispiel, bei dem von der abstrakten Basisklasse GraphObj auf zwei weitere Klassen virtual public vererbt wird: einmal auf BeschriftetesObjekt, ebenfalls abstrakt, und einmal auf die konkrete Klasse Rechteck. Von diesen beiden Klassen findet wiederum eine public-Mehrfachvererbung auf BeschriftetesRechteck statt. Den Konstruktor dieser Klasse zitiere ich grad mal:</p>
<pre><code class="language-cpp">BeschriftetesRechteck(const Ort&amp; ort, int h, int b, const std::string&amp; b) : GraphObj(ort), BeschriftetesObjekt(ort, b), Rechteck(ort, h, b) {}
</code></pre>
<p>Die Initialisierungen der Subobjekte mit dem Ort-Parameter (, der aus einer anderen Klasse bekannt ist, hier aber für das eigentliche Problem unwichtig ist,) findet direkt durch Aufruf des Basisklassen-Konstruktors statt. Die Ort-Parameter in den Konstruktoren der Klassen BeschriftetesObjekt und Rechteck werden schlichtweg ignoriert, da die Basisklasse GraphObj virtuell ist und somit in BeschriftetesRechteck nur ein Subobjekt der Klasse GraphObj vorhanden ist.</p>
<p>So jetzt zu meiner eigentlichen Frage: (Ich hoffe, das Ganze war soweit verständlich.)<br />
In meinem Buch wird behauptet, ein vollständiges Objekt wäre ein Objekt, das nicht als Subobjekt in einem anderen Objekt auftaucht. Außerdem soll ein Objekt der Klasse Rechteck ein vollständiges Objekt sein. Dabei gibt's doch in BeschriftetesRechteck ein Rechteck-Subobjekt durch die public-Vererbung.</p>
<p>Denkfehler meinerseits oder Fehler im Buch?</p>
<p>Danke für eure Antworten. <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>PS.: Kann mir jemand bitte den Unterschied zwischen Aggregation und der &quot;benutzt-Beziehung&quot; erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191615/vollständiges-objekt</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 03:27:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191615.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Sep 2007 22:05:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vollständiges Objekt on Wed, 05 Sep 2007 02:27:59 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe hier ein Programmbeispiel, bei dem von der abstrakten Basisklasse GraphObj auf zwei weitere Klassen virtual public vererbt wird: einmal auf BeschriftetesObjekt, ebenfalls abstrakt, und einmal auf die konkrete Klasse Rechteck. Von diesen beiden Klassen findet wiederum eine public-Mehrfachvererbung auf BeschriftetesRechteck statt. Den Konstruktor dieser Klasse zitiere ich grad mal:</p>
<pre><code class="language-cpp">BeschriftetesRechteck(const Ort&amp; ort, int h, int b, const std::string&amp; b) : GraphObj(ort), BeschriftetesObjekt(ort, b), Rechteck(ort, h, b) {}
</code></pre>
<p>Die Initialisierungen der Subobjekte mit dem Ort-Parameter (, der aus einer anderen Klasse bekannt ist, hier aber für das eigentliche Problem unwichtig ist,) findet direkt durch Aufruf des Basisklassen-Konstruktors statt. Die Ort-Parameter in den Konstruktoren der Klassen BeschriftetesObjekt und Rechteck werden schlichtweg ignoriert, da die Basisklasse GraphObj virtuell ist und somit in BeschriftetesRechteck nur ein Subobjekt der Klasse GraphObj vorhanden ist.</p>
<p>So jetzt zu meiner eigentlichen Frage: (Ich hoffe, das Ganze war soweit verständlich.)<br />
In meinem Buch wird behauptet, ein vollständiges Objekt wäre ein Objekt, das nicht als Subobjekt in einem anderen Objekt auftaucht. Außerdem soll ein Objekt der Klasse Rechteck ein vollständiges Objekt sein. Dabei gibt's doch in BeschriftetesRechteck ein Rechteck-Subobjekt durch die public-Vererbung.</p>
<p>Denkfehler meinerseits oder Fehler im Buch?</p>
<p>Danke für eure Antworten. <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>PS.: Kann mir jemand bitte den Unterschied zwischen Aggregation und der &quot;benutzt-Beziehung&quot; erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359077</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Wed, 05 Sep 2007 02:27:59 GMT</pubDate></item><item><title><![CDATA[Reply to Vollständiges Objekt on Wed, 05 Sep 2007 03:08:56 GMT]]></title><description><![CDATA[<p>naja bin mir nich sicher, aber vll. verwechselst du subobjekt und subklasse!<br />
Ein subobjekt ist meiner meinung nach eine objekt welches als Member in einem anderen Objekt existiert. Eine subklasse ist eine abgeleitet klasse..</p>
<p>Zur zweiten Frage:</p>
<p>Aggregation bedeutet das Objekt Y der Klasse X nur existiert , solange das Objekt A der Klasse B lebt. Objekt Y ist demnach ein Member der Klasse B, und weird erzeugt sobald Objekt A erzeugt wird.</p>
<p>Benutz-Beziehugn bedeudet, das Objekt Y bzw. dessen klasse ander Objekte beinhalt bzw. benutzt... wobei die existens dieser Objekt nich abhängig von der existenz der Y Objektes ist.</p>
<p>Hoffe ich habe die fragen richtig beantwortet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359110</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 05 Sep 2007 03:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Vollständiges Objekt on Wed, 05 Sep 2007 11:57:59 GMT]]></title><description><![CDATA[<p>Ein Subobjekt ist jedes Objekt, das Teil eines anderen Objektes ist: Elemente eines Arrays, nichtstatische Memberobjekte einer Klasse und Basisklassenobjekte einer Klasse. Ein Objekt, dass kein Subobjekt ist, ist ein vollständiges Objekt.</p>
<p>Ein Objekt eine abstrakten Klasse kann nur als Basisklassensubobjekt auftreten (außer während der Konstruktion bzw. Zerstörung des Objekts der abgeleiteten Klasse [des abgeleiteten Objektes - was in meinen Augen aber eine unglückliche Begriffsbildung ist, denn Objekte werden ja gar nicht abgleitet, sondern Klassen]).</p>
<blockquote>
<p>Außerdem soll ein Objekt der Klasse Rechteck ein vollständiges Objekt sein. Dabei gibt's doch in BeschriftetesRechteck ein Rechteck-Subobjekt durch die public-Vererbung.</p>
</blockquote>
<p>Die Subobjekteigenschaft ist, wie der Begriff impliziert, die Eigenschaft eines bestimmten Objektes, nicht einer Klasse. In deinem Beispiel hast du also Recht; hier tritt Rechteck als Basisklasse auf, das zugehöre Objekt demzufolge ein Basisklassensubobjekt. Gemeint ist in dem Buch wohl, da Rechteck keine abstrakte Klasse ist, dass auch vollständige Objekte vom Typ Rechteck erstellt werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359353</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 05 Sep 2007 11:57:59 GMT</pubDate></item><item><title><![CDATA[Reply to Vollständiges Objekt on Wed, 05 Sep 2007 15:17:16 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Danke für die Erklärung. Ich dachte mir schon, dass damit die Möglichkeit der Erstellung von Rechteck-Objekten gemeint ist, wollte mich aber nochmal vergewissern. <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13742">@BorisDieKlinge</a>:</p>
<blockquote>
<p>Objekt Y bzw. dessen klasse ander Objekte beinhalt</p>
</blockquote>
<blockquote>
<p>wobei die existens dieser Objekt nich abhängig von der existenz der Y Objektes ist</p>
</blockquote>
<p>Ist das nicht widersprüchlich? Die benutzten Objekte werden doch erst erstellt, wenn ein Objekt Y initialisiert wird, da dessen Klasse die benutzten Objekte einschließt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359540</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Wed, 05 Sep 2007 15:17:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vollständiges Objekt on Wed, 05 Sep 2007 18:04:25 GMT]]></title><description><![CDATA[<p>Ich meine damit, das Objekt Y referenzen auf X Objekte haben kann. D.h. die existens der X Objekte ist nich abhängig von der Lebensdauer des Y Objekts.</p>
<pre><code class="language-cpp">class X{
  .....
};

// (A)
class Y{

X *m_pObj;

  Y(){
    m_pObj= new X();
  }
  ~Y(){
    delete m_pObj;
  }

};

//(B)

//Erzeugen des Objekt irgendwo im Program
X *pGlobObj= new X();

class Y{

X *m_pObj;

  Y(X *p): m_pObj(p){}
  ~Y(){}

};

// Löschen des X Objekts irgendwo im Programm
delete pGlobObj;
</code></pre>
<p>(A): X Existiert nur wenn Y existiert (Aggregation)</p>
<p>(B): X Beinhalt Y (Referenz) aber Y lebe auch ohne X</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359672</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 05 Sep 2007 18:04:25 GMT</pubDate></item><item><title><![CDATA[Reply to Vollständiges Objekt on Thu, 06 Sep 2007 01:40:06 GMT]]></title><description><![CDATA[<p>Danke für dein Codebeispiel. Hab den Unterschied jetzt kapiert und dass man sich evtl. nicht allzu fest an gewisse Begriffe klammern sollte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359854</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Thu, 06 Sep 2007 01:40:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vollständiges Objekt on Thu, 06 Sep 2007 03:10:29 GMT]]></title><description><![CDATA[<p>eben:) Im programmieraltag wird weniger mit solchen Begriffen umsich geworfen:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359857</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 06 Sep 2007 03:10:29 GMT</pubDate></item></channel></rss>