<?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 einer fremden Klasse benutzen]]></title><description><![CDATA[<p>Hallöchen,</p>
<p>habe eine Frage, die so schwer nicht sein dürfte. Leider bekomme ich es nicht hin.</p>
<p>Wie kann ich ein Objekt einer fremden Klasse in einer anderen Klasse so initialisieren, dass ich es in mehreren Funktionen einsetzten kann?</p>
<p>Beispiel: Meine fremde Klasse nennt sich CReader. In der Klasse CTabelle möchte ich nun ein CReader-Objekt anlegen. In einer Funktion klappt das bestens.</p>
<pre><code class="language-cpp">void CTabelle::IrgendeineFunktion()
{
   CReader Readerobjekt(1); // Konstruktor erwartet einen int-Wert

   ...
   // hier stelle ich ein paar Dinge mit dem Objekt an.
}

void CTabelle::EineAndereFunktion()
{
   // hier kann ich leider nicht auf das Objekt zugreifen,
   // ich müsste es neu initialisieren, damit gehen mir aber
   // die Daten verloren.
}

// Ich habe auch schon versucht, das Objekt in der Quelldatei der Klasse
// CTabelle anzulegen, geht aber nicht. Es kommt ein Fehler, dass das Objekt
// konstant ist, wenn ich es mit:

CReader ReaderObjekt(1)

// anlege;
</code></pre>
<p>Vielleicht mache ich ja auch einen Denkfehler.<br />
Vielen Dank für eure Hilfe.</p>
<p>Gruß,<br />
Krommi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176437/objekt-einer-fremden-klasse-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 16:22:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176437.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Mar 2007 10:13:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Wed, 21 Mar 2007 10:13:07 GMT]]></title><description><![CDATA[<p>Hallöchen,</p>
<p>habe eine Frage, die so schwer nicht sein dürfte. Leider bekomme ich es nicht hin.</p>
<p>Wie kann ich ein Objekt einer fremden Klasse in einer anderen Klasse so initialisieren, dass ich es in mehreren Funktionen einsetzten kann?</p>
<p>Beispiel: Meine fremde Klasse nennt sich CReader. In der Klasse CTabelle möchte ich nun ein CReader-Objekt anlegen. In einer Funktion klappt das bestens.</p>
<pre><code class="language-cpp">void CTabelle::IrgendeineFunktion()
{
   CReader Readerobjekt(1); // Konstruktor erwartet einen int-Wert

   ...
   // hier stelle ich ein paar Dinge mit dem Objekt an.
}

void CTabelle::EineAndereFunktion()
{
   // hier kann ich leider nicht auf das Objekt zugreifen,
   // ich müsste es neu initialisieren, damit gehen mir aber
   // die Daten verloren.
}

// Ich habe auch schon versucht, das Objekt in der Quelldatei der Klasse
// CTabelle anzulegen, geht aber nicht. Es kommt ein Fehler, dass das Objekt
// konstant ist, wenn ich es mit:

CReader ReaderObjekt(1)

// anlege;
</code></pre>
<p>Vielleicht mache ich ja auch einen Denkfehler.<br />
Vielen Dank für eure Hilfe.</p>
<p>Gruß,<br />
Krommi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249630</guid><dc:creator><![CDATA[Krommi]]></dc:creator><pubDate>Wed, 21 Mar 2007 10:13:07 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Wed, 21 Mar 2007 10:15:57 GMT]]></title><description><![CDATA[<p>Du legst das Objekt bei der Klassendefinition an und initialisierst es (per Init-Liste) im Construktor:</p>
<pre><code class="language-cpp">class CTabelle
{
  CReader m_reader;
public:
  CTabelle() : m_reader(1) {}

  void funktion()
  {
    m_reader.read(whatever);
    ...
  }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1249634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249634</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 21 Mar 2007 10:15:57 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Wed, 21 Mar 2007 10:17:34 GMT]]></title><description><![CDATA[<p>Wenn ich es richtig verstanden habe:</p>
<p>indem du der Klasse eine Membervariable gibst und diese im Konstruktor initialisierst.</p>
<pre><code class="language-cpp">class CTabelle{
private:
    CReader Readerobjekt;
public:
    CTabelle():Readerobjekt(1){}
//weitere Funtkionen
};
</code></pre>
<p>Ich hoffe, das ist richtig, ich bin selbst noch Anfänger.</p>
<p>EDIT: CStoll war wie zu erwarten schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249635</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Wed, 21 Mar 2007 10:17:34 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Wed, 21 Mar 2007 11:52:42 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>mir scheint es, dass Du möchtest, dass Dein CTabelle-Objekt ein CReader-Objekt &quot;besitzt&quot;. Das nennt man Aggregation und ist einfach:</p>
<pre><code class="language-cpp">class CTabelle {
   CReader Readerobjekt; // nun &quot;Bestandteil&quot; einer CTabelle
public:
   CTabelle() : Readerobjekt(1) {} // In der Initialisierungsliste des Konstruktors initialisieren
...
};

void CTabelle::EineAndereFunktion()
{
   Readerobjekt.doSomething();
}
</code></pre>
<p>Falls das Readerobjekt das zulässt, kannst Du es zur Laufzeit durch &quot;ein anderes ersetzen&quot; (genauer: Seine Werte durch die eines anderen überschreiben):</p>
<pre><code class="language-cpp">void CTabelle::ersetzeReader(CReader const&amp; neues)
{
   Readerobjekt = neues;
}

void CTabelle::ersetzeReader(int neuesI)
{
   Readerobjekt = CReader(1);
}
</code></pre>
<p>Falls das Readerobjekt nicht zusammen mit der CTabelle &quot;geboren werden und sterben&quot; soll, bleibt Dir nur die Verwendung eines Zeigers:</p>
<pre><code class="language-cpp">class CTabelle {
   CReader* Readerobjekt;
public:
   CTabelle() : Readerobjekt(0) {} 
   ~CTabelle() { delete Readerobjekt; } // Hinterher aufräumen nicht vergessen
...
};

void CTabelle::setzeReader(int i)
{
   delete Readerobjekt; // altes löschen
   Readerobjekt = new CReader(i); // neues erzeugen
}

void CTabelle::EineAndereFunktion()
{
   if(ReaderObjekt) Readerobjekt-&gt;doSomething();
}
</code></pre>
<p>Das geht natürlich auch alles mit smart_pointern und anderem schicken Zeug, aber das sind erstmal die Basics.</p>
<p>EDIT: Tja, nur Bronze für mich, dafür habe ich mehr geschrieben. <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249641</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 21 Mar 2007 11:52:42 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Wed, 21 Mar 2007 14:06:38 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure Antworten.</p>
<p>Habe eure Vorschläge mal ausprobiert:</p>
<pre><code class="language-cpp">class CTabelle {
   CReader Readerobjekt;
public:
   CTabelle() : Readerobjekt(1) {} 
...
};
</code></pre>
<p>Jetzt bekomme ich zwei Fehlermeldungen:<br />
error C2668: 'CTabelle::CTabelle': Mehrdeutiger Aufruf einer überladenen Funktion<br />
warning C4520:'CTabelle': Mehrere Standardkonstruktoren angegeben</p>
<p>Hmm...verstehe ich nicht. In der CReader-Klasse habe ich den Standardkonstruktor (ohne Argumente) durch einen Konstruktor<br />
ersetzt, der einen int-wert annimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249819</guid><dc:creator><![CDATA[Krommi]]></dc:creator><pubDate>Wed, 21 Mar 2007 14:06:38 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Wed, 21 Mar 2007 14:13:54 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ist nicht wirklich schwer .... er sagt eigentlich genau, was ihn stört:</p>
<p>Krommi schrieb:</p>
<blockquote>
<p>...<br />
error C2668: 'CTabelle::CTabelle': Mehrdeutiger Aufruf einer überladenen Funktion<br />
warning C4520:'CTabelle': Mehrere Standardkonstruktoren angegeben<br />
....</p>
</blockquote>
<p>Du hast mehrere Standardkonstruktoren in der Klassendefinition angegeben. Das sind die Dinger , die</p>
<ul>
<li>so aussehen, wie Funktionen (also hinten runde Klammern haben),</li>
<li>genauso heißen wie die Klasse (in diesem Fall also CTabelle) und</li>
<li>keinen Parameter übernehmen (&quot;void&quot; gilt auch als &quot;kein Parameter&quot;)</li>
</ul>
<p>Du hast also aller Wahrscheinlichkeit nach noch ein zweites</p>
<pre><code class="language-cpp">CTabelle()
</code></pre>
<p>innerhalb der Klassendefinition stehen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249829</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 21 Mar 2007 14:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Wed, 21 Mar 2007 14:42:18 GMT]]></title><description><![CDATA[<p>oder er hat bei seinem Konstruktor mit int Parameter einen Defaultwert angegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249849</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 21 Mar 2007 14:42:18 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Wed, 21 Mar 2007 15:16:42 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>oder er hat bei seinem Konstruktor mit int Parameter einen Defaultwert angegeben.</p>
</blockquote>
<p>Stimmt ! War mir nicht eingefallen (liegt auch daran, dass ich Defaultparameter möglichst nicht verwende) ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249874</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 21 Mar 2007 15:16:42 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Wed, 21 Mar 2007 15:30:52 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Braunstein schrieb:</p>
<blockquote>
<p>oder er hat bei seinem Konstruktor mit int Parameter einen Defaultwert angegeben.</p>
</blockquote>
<p>Stimmt ! War mir nicht eingefallen (liegt auch daran, dass ich Defaultparameter möglichst nicht verwende) ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p>Echt? Die benutze ich erst Recht ausgiebig, wo ich nur kann, weil ich sie immer in Sprache X sehr vermisse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249882</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 21 Mar 2007 15:30:52 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Wed, 21 Mar 2007 16:18:30 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>...Echt? Die benutze ich erst Recht ausgiebig, wo ich nur kann, weil ich sie immer in Sprache X sehr vermisse.</p>
</blockquote>
<p>Tja, so unterschiedlich sind die Vorlieben. <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="😉"
    /><br />
Einerseits stört mich halt die Gefahr von Mehrdeutigkeiten und andererseits finde ich es seltsam, Funktionen, die unterschiedliches tun zusammenzupacken (wenn ich natürlich auch sehe, dass es bequem ist). (in der Abschätzung &quot;... tun dasselbe, außer ...&quot; betonen Defaultparameter eher das Erste, unterschiedliche Funktionen/Overloads eher das Zweitere)</p>
<p>... aber es hängt wohl auch viel davon ab, was man konkret programmiert. In meinem Umfeld (technische Infrastruktur) kommt es eigentlich nie vor, dass ein Parameter wirklich optional ist. Entweder man braucht ihn immer ... oder nie. Alles Andere wäre (in meinem Umfeld) &quot;Weiß-noch-nicht-so-genau-Programmierung&quot; (oder anders gesagt: schlechtes Design). <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>Auch jeden Fall sehe ich es aber als Frage des persönlichen Geschmacks und Stils und würde niemals aus der Verwendung von Defaultparametern (allein) auf ein &quot;schlechtes Programm&quot; oder einen &quot;schlechten Stil&quot; schließen. Vielleicht entdecke ich die ja später auch noch mal für mich... (wäre nicht das erste Mal, dass sich mein Stil ändert).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249913</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 21 Mar 2007 16:18:30 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Thu, 22 Mar 2007 07:20:23 GMT]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>@ Simon2<br />
du hattest recht...hatte wirklich einen zweiten Konstruktor in CTabelle stehen.</p>
<p>So, bin jetzt auf nem guten Weg <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /><br />
habe jetzt nur noch einen Fehler, wenn ich<br />
Reader1(1) in die Ini-Liste des CTabelle-Konstruktors einfüge:</p>
<p>error C2436: 'Reader1': Memberfunktion oder geschachtelte Klasse in der Liste der Konstruktorinitialisierungen.</p>
<p>???</p>
<p>Bitte noch einen kleinen Tipp.</p>
<p>Grüße,<br />
Krommi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250208</guid><dc:creator><![CDATA[Krommi]]></dc:creator><pubDate>Thu, 22 Mar 2007 07:20:23 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Thu, 22 Mar 2007 08:36:35 GMT]]></title><description><![CDATA[<p>Krommi schrieb:</p>
<blockquote>
<p>Guten Morgen,</p>
<p>@ Simon2<br />
du hattest recht...hatte wirklich einen zweiten Konstruktor in CTabelle stehen.</p>
<p>So, bin jetzt auf nem guten Weg <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /><br />
habe jetzt nur noch einen Fehler, wenn ich<br />
Reader1(1) in die Ini-Liste des CTabelle-Konstruktors einfüge:</p>
<p>error C2436: 'Reader1': Memberfunktion oder geschachtelte Klasse in der Liste der Konstruktorinitialisierungen.</p>
<p>???</p>
<p>Bitte noch einen kleinen Tipp.</p>
<p>Grüße,<br />
Krommi</p>
</blockquote>
<p>Laß doch mal kurz ein wenig Code dazu sehen ...<br />
An sich sagt auch hier die Fehlermeldung genau aus, was Du falsch gemacht hast...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250240</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 08:36:35 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Fri, 23 Mar 2007 12:57:56 GMT]]></title><description><![CDATA[<p>Ok, hat alles geklappt...hatte noch einen Fehler im Konstruktor der Readerklasse.</p>
<p>Vielen Dank für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1251106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1251106</guid><dc:creator><![CDATA[Krommi]]></dc:creator><pubDate>Fri, 23 Mar 2007 12:57:56 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Tue, 27 Mar 2007 08:22:14 GMT]]></title><description><![CDATA[<p>Kann ich ein Objekt in einer Basisklasse als statisch initialisieren und von mehreren Klassen auf das gleiche Objekt zugreifen?</p>
<p>Ich erhalte immer die Fehlermeldung, dass ich keinen Zugriff auf private Elemente habe, obwohl ich nur auf Public-Funktionen des Objektes zuzugreifen versuche?</p>
<p>Danke für eure Hilfe,<br />
Krommi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1253575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253575</guid><dc:creator><![CDATA[Krommi]]></dc:creator><pubDate>Tue, 27 Mar 2007 08:22:14 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer fremden Klasse benutzen on Tue, 27 Mar 2007 08:27:40 GMT]]></title><description><![CDATA[<p>Du kannst etwas statisch deklarieren, musst es dann aber auch gleich initialisieren (in der entsprechenden .cpp) Dieses Objekt gehört dann allen Instanzen der Klasse.</p>
<p>Wenn dieses Objekt private ist kannst du natürlich nicht von auszerhalb der Klasse darauf zugreifen.</p>
<p>Etwas Code vielleicht?</p>
<p>EDIT: ich bin jetzt davon ausgegangen, dass statisch= static ist. Sollte ich das missverstanden haben bitte diesen Beitrag ignorieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1253584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1253584</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Tue, 27 Mar 2007 08:27:40 GMT</pubDate></item></channel></rss>