<?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[class in class initialisieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab folgendes Problem, ich möchte in der Klasse<br />
ein klassen Objekt &amp;meinY haben...<br />
weiters habe ich noch das Problem das ich ein Objekt Y&amp; _meinY anscheinend<br />
auch im leer Constructor initialisieren muss, wie mache ich das?</p>
<p>da das jetzt schwer zu erklären ist hier der C# code:</p>
<pre><code class="language-csharp">class X { 

        private Y meinY;
        public X(){}
        public X(ref Y m, int n, int k) {
            meinY = m;
        }
        public Boolean move() {
            return true;
        }
    }

    class Y {
        public Y() { }
        public Y(int i) { }
    }
</code></pre>
<p>C++ Code:</p>
<pre><code class="language-cpp">class X {
private:
  Y&amp; _meinY;
public:
  X();
  X(int, Y&amp; meinY , int = 0): _meinY(meinY){};
  X(const X&amp;);
  bool move();
};

class Y {
public:
  Y();
  Y( int = 0);
  Y(const Y&amp;, int = 0);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/263279/class-in-class-initialisieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 21:37:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263279.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 18 Mar 2010 10:23:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 10:23:59 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab folgendes Problem, ich möchte in der Klasse<br />
ein klassen Objekt &amp;meinY haben...<br />
weiters habe ich noch das Problem das ich ein Objekt Y&amp; _meinY anscheinend<br />
auch im leer Constructor initialisieren muss, wie mache ich das?</p>
<p>da das jetzt schwer zu erklären ist hier der C# code:</p>
<pre><code class="language-csharp">class X { 

        private Y meinY;
        public X(){}
        public X(ref Y m, int n, int k) {
            meinY = m;
        }
        public Boolean move() {
            return true;
        }
    }

    class Y {
        public Y() { }
        public Y(int i) { }
    }
</code></pre>
<p>C++ Code:</p>
<pre><code class="language-cpp">class X {
private:
  Y&amp; _meinY;
public:
  X();
  X(int, Y&amp; meinY , int = 0): _meinY(meinY){};
  X(const X&amp;);
  bool move();
};

class Y {
public:
  Y();
  Y( int = 0);
  Y(const Y&amp;, int = 0);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1870755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870755</guid><dc:creator><![CDATA[diego2k]]></dc:creator><pubDate>Thu, 18 Mar 2010 10:23:59 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 10:37:12 GMT]]></title><description><![CDATA[<p>Garnicht. Referenzen brauchen immer eine Initialisierung. Vermutlich willst du aber keine Referenz speichern, sondern einen Pointer. Den kann man defaultmässig mit 0 initialisieren, um zu signalisieren, dass er auf kein gültiges Objekt zeigt.<br />
C++ ist kein C#, du begibst dich hier auf dünnes Eis, weil du die komplette Speicherverwaltung und Lebensdauer von Objekten selbst übernehmen musst und dir kein Garbage Collector die Arbeit abnimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870761</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 18 Mar 2010 10:37:12 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 11:04:15 GMT]]></title><description><![CDATA[<p>Es kann hier keine 1:1 Übersetzung geben. Die Sprachen sind dafür zu unterschiedlich. Das ist wie, wenn Du versuchst, einen Wort-Witz zu übersetzten, der nur in der Originalsprache lustig ist. Denk Dir einfach einen anderen Witz aus, der in der Ziel-Sprache funktioniert.</p>
<p>In Deinem C# Beispiel ist <code>m</code> im Konstruktor von <code>X</code> ein Referenz-Parameter auf eine <em>Referenz</em> (Y ist ja ein Referenztyp). Das scheint Dir nicht klar zu sein; denn Du nutzt dies nirgends aus. Das <code>ref</code> kannst Du getrost weglassen in Deinem C#-Beispiel.</p>
<p>Du weißt auch, dass <code>class</code> in den zwei Sprachen anders &quot;funktioniert&quot;, ja?</p>
<p>Wie DocShoe schon sagte, in C++ gibt's keine &quot;Garbage Collection&quot;. Zur Verwaltung der Lebenszeit von Objekten ordnet man ihnen einen &quot;Besitzer&quot; zu, der für das Löschen verantworklich ist. Diese &quot;Besitzverhältnisse&quot; ergeben typischerweise eine Baumstruktur oder zumindest einen <a href="http://en.wikipedia.org/wiki/Directed_acyclic_graph" rel="nofollow">DAG</a>, wenn sich mehrere Objekte den Besitz teilen (zB tr1::shared_ptr) -- mag vielleicht auch Ausnahmen geben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870776</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 18 Mar 2010 11:04:15 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 13:20:34 GMT]]></title><description><![CDATA[<p>Du kannst durchaus referenzen als Parameter verwenden nur brauchst du dafür die Initialisierungsliste.</p>
<pre><code class="language-cpp">class test
{
public:
     test(typ &amp; lala)
      :  ref(lala) // 
     {
     }

private:
     typ &amp; ref;
}
</code></pre>
<p>Die Sache ist halt die, das die Elemente bereits existieren wenn wenn der Konstruktorrumpf aufgerufen wird und da ist es mit der Initialisierung schon zu spät. Zur Initialisierung von Werten brauchst du halt diese Initialiserungsliste.</p>
<p>EDIT:<br />
Die Reihenfolge in der Klassen erstellt werden spielt eine Rolle, Bezeichner sind erst dann bekantn wenn sie zuvor schon mal deklariert wurden.<br />
Um zukünftigen Problemen vorzubeugen (bei sich gegenseitig speichernden Klassen) kannst du ja mal nach Vorwärtsdeklaration schauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870796</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Thu, 18 Mar 2010 13:20:34 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 15:08:17 GMT]]></title><description><![CDATA[<p>Ich hab das ganze hier nur einmal in C# geschrieben um verständlicher zu machen<br />
was ich eigentlich will...</p>
<p>Die Sache ist die, das ganze ist eine Vorgabe von einer Übung.<br />
Darin steht das eine Klasse zu erstellen ist die folgenden Member hat und dafür<br />
sind unter anderm die Constructoren zu schreiben:</p>
<pre><code class="language-cpp">//X.h
Class X{
private:
  Y&amp; bla_;
public:
  X(Y&amp; bla);
};

//X.cpp
X::X(Y&amp; bla):bla_(bla)
{}
</code></pre>
<p>So funktioniert das ganze ja, nur sobald ich den default Constructor dazu tue<br />
also X() meckert der Compiler das bla_ natürlich nicht null sein darf.</p>
<p>Jetzt is die Frage wie kann ich hier trotzdem den default Contructor<br />
implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870896</guid><dc:creator><![CDATA[diego2k]]></dc:creator><pubDate>Thu, 18 Mar 2010 15:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 15:27:02 GMT]]></title><description><![CDATA[<blockquote>
<p>Jetzt is die Frage wie kann ich hier trotzdem den default Contructor<br />
implementieren?</p>
</blockquote>
<p>Wie jeden anderen Konstruktor auch.</p>
<pre><code class="language-cpp">//X.h
Class X {
private:
  Y&amp; bla_;
public:
  X(Y&amp; bla);
  X(); // Default Ctor
};

//X.cpp
X::X(Y&amp; bla): bla_(bla) { }
X::X(): bla_(/*Default-Wert*/) { } // Default Ctor
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1870912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870912</guid><dc:creator><![CDATA[Bruder Lustig]]></dc:creator><pubDate>Thu, 18 Mar 2010 15:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 15:29:01 GMT]]></title><description><![CDATA[<p>Oh, sorry, habe übersehen, dass es sich beim Member Y um eine Referenz handelt.<br />
Ist dann ein Default Ctor überhaupt sinnvoll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870914</guid><dc:creator><![CDATA[Bruder Lustig]]></dc:creator><pubDate>Thu, 18 Mar 2010 15:29:01 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 15:30:33 GMT]]></title><description><![CDATA[<p>diego2k schrieb:</p>
<blockquote>
<p>Die Sache ist die, das ganze ist eine Vorgabe von einer Übung.</p>
</blockquote>
<p>Aha. Sicher, dass Du eine Referenz als Element haben willst?</p>
<p>diego2k schrieb:</p>
<blockquote>
<p>Jetzt is die Frage wie kann ich hier trotzdem den default Contructor<br />
implementieren?</p>
</blockquote>
<p>Auch ein Default-Konstruktor müsste die Referenz <code>bla_</code> initialisieren. Aber womit?</p>
<p>Ich habe immer noch das Gefühlt, dass du wichtige C++ Konzepte nicht verstanden hast -- Referenzen zum Beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870917</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 18 Mar 2010 15:30:33 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 15:33:47 GMT]]></title><description><![CDATA[<p>super 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="🙂"
    /><br />
bla_() auf die Idee hier nichts reinzuschreiben kommt man gar nicht so leicht -.-</p>
<p>aber jetzt hab ich noch das problem das er mir ein warning ausgiebt:<br />
default-initialization of 'Y' which has reference type.</p>
<p>leider darf ich Y.cpp/.h nicht verändern ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870919</guid><dc:creator><![CDATA[diego2k]]></dc:creator><pubDate>Thu, 18 Mar 2010 15:33:47 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 15:37:59 GMT]]></title><description><![CDATA[<p>diego2k schrieb:</p>
<blockquote>
<p>super 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="🙂"
    /><br />
bla_() auf die Idee hier nichts reinzuschreiben kommt man gar nicht so leicht -.-</p>
</blockquote>
<p>Dann probier mal aus, ob's auch wirklich funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870921</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 18 Mar 2010 15:37:59 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 15:49:37 GMT]]></title><description><![CDATA[<p>diego2k schrieb:</p>
<blockquote>
<p>aber jetzt hab ich noch das problem das er mir ein warning ausgiebt:<br />
default-initialization of 'Y' which has reference type.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Is klar. Referenzen referenzieren <strong>immer</strong> ein Objekt. Sie müssen dementsprechend initialisiert werden.</p>
<p>diego2k schrieb:</p>
<blockquote>
<p>leider darf ich Y.cpp/.h nicht verändern ...</p>
</blockquote>
<p>Also entweder hat der, der die Übungsaufgabe gestellt hat, keinen Plan von C++ oder Du hast die Aufgabenstellung nicht richtig wiedergegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870930</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 18 Mar 2010 15:49:37 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 15:56:58 GMT]]></title><description><![CDATA[<blockquote>
<p>Also entweder hat der, der die Übungsaufgabe gestellt hat, keinen Plan von C++ oder Du hast die Aufgabenstellung nicht richtig wiedergegeben.</p>
</blockquote>
<p>Ich vermute Letzteres. Wenn Ersteres zutrifft, kannst du ja deinem Konstruktor einen Default Konstruktor mit Speicherleck implementieren:</p>
<pre><code class="language-cpp">X::X(): bla_(*(new Y())) { } // Default Ctor
</code></pre>
<p>Glaube aber kaum, dass das die gesuchte Lösung ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870940</guid><dc:creator><![CDATA[Bruder Lustig]]></dc:creator><pubDate>Thu, 18 Mar 2010 15:56:58 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 16:17:41 GMT]]></title><description><![CDATA[<p>Über sowas macht man keine Witze, Bruder Lustig! <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="😮"
    /></p>
<p>Also, die einzige Möglichkeit, die ich sehe, die sich auch nur in (sehr) relativer Nähe zur Grenze der geistigen Gesundheit bewegt, ist dafür ein Objekt mit static storage duration vorzuhalten, etwa</p>
<pre><code class="language-cpp">//X.h
Class X {
public:
  X(Y&amp; bla);
  X(); // Default Ctor

private:
  Y&amp; bla_;
  static Y default_wert;
};
</code></pre>
<pre><code class="language-cpp">//X.cpp
X::X(Y&amp; bla): bla_(bla) { }
X::X(): bla_(X::default_wert) { } 

Y X::default_wert;
</code></pre>
<p>Die üblichen Vorbehalte gegen globale Variablen halten natürlich auch hier.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870954</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 18 Mar 2010 16:17:41 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 16:37:38 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Also, die einzige Möglichkeit, die ich sehe, die sich auch nur in (sehr) relativer Nähe zur Grenze der geistigen Gesundheit bewegt, ist dafür ein Objekt mit static storage duration vorzuhalten, etwa</p>
</blockquote>
<p>Da gefällt mir die new variante fast besser...</p>
<p>und du musst die header datei ändern, was laut aufgabenstellung nicht erlaubt ist.</p>
<p>was natürlich gehen würde wäre folgendes:</p>
<pre><code class="language-cpp">namespace {
  Y&amp; sodomize() {
    static Y sodomizer;
    return sodomizer;
  }
}
X::X(): bla_(sodomize()) { }
</code></pre>
<p>dann sind wir innerhalb der aufgabenstellung geblieben... der name der funktion sagt aber schon alles <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=":/"
      alt="😕"
    /></p>
<p>PS:<br />
bei dieser aufgabenstellung gibt es keine tragbare lösung.</p>
<p>PPS:<br />
oder eben einen memory manager schreiben:<br />
der dir ein Y objekt liefert und im dtor von X rufst du halt deleteObjIfExists() auf und wenn der manager das Y objekt erstellt hat, löscht er es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870956</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 18 Mar 2010 16:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 18:38:57 GMT]]></title><description><![CDATA[<p>Danke für die Antworten!</p>
<pre><code class="language-cpp">X::X(): bla_(*(new Y())) { } // Default Ctor
</code></pre>
<p>also das funktioniert mal ...<br />
aber Speicherlecks sind nicht das was ich will ....</p>
<p>Auch die anderen Code Snippets funktionieren. Das Y is eigentlich nur eine<br />
print Klasse da passiert gar nix außer 2 Methoden die nen char* entgegennehmen und aufm Bildschirm ausgeben.</p>
<p>Wie wär den das schlauer zu machen?</p>
<p>wenn ich in der cpp keinen default constructor einbaue sondern nur in der .h<br />
gibts auch keine warning ... warum?<br />
allerdings muss ich leider einen char array initialisieren und<br />
dafür brauch ich den Constructor ....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871004</guid><dc:creator><![CDATA[diego2k]]></dc:creator><pubDate>Thu, 18 Mar 2010 18:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 18:46:43 GMT]]></title><description><![CDATA[<p>diego2k schrieb:</p>
<blockquote>
<pre><code class="language-cpp">X::X(): bla_(*(new Y())) { } // Default Ctor
</code></pre>
<p>also das funktioniert mal ...<br />
<strong>aber Speicherlecks sind nicht das was ich will</strong> ....</p>
</blockquote>
<p>Dann ist ja gut.</p>
<p>diego2k schrieb:</p>
<blockquote>
<p>Auch die anderen Code Snippets funktionieren. Das Y is eigentlich nur eine<br />
print Klasse da passiert gar nix außer 2 Methoden die nen char* entgegennehmen und aufm Bildschirm ausgeben.</p>
<p>Wie wär den das schlauer zu machen?</p>
</blockquote>
<p>Du bist ja ein Spaßvogel. Zeigst hier zwei Klassen X und Y und fragst, wie's besser geht. Besser wäre natürlich die Klassen A und B zu nennen! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Wenn Du etwas konstruktiveres hören willst, musst Du schon mit mehr Infos rausrücken...</p>
<p>diego2k schrieb:</p>
<blockquote>
<p>wenn ich in der cpp keinen default constructor einbaue sondern nur in der .h<br />
gibts auch keine warning ... warum?</p>
</blockquote>
<p>Wieso sollte es die geben? Machst ja nix verbotenes, dann. Du kannst den Default-Ctor nur dann nicht aufrufen, weil er nur <em>deklariert</em> und nicht <em>definiert</em> wurde. :p</p>
<p>diego2k schrieb:</p>
<blockquote>
<p>allerdings muss ich leider einen char array initialisieren und<br />
dafür brauch ich den Constructor ....</p>
</blockquote>
<p>Was für'n char-Array? Zeig doch mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871007</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 18 Mar 2010 18:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 18:48:34 GMT]]></title><description><![CDATA[<blockquote>
<p>wenn ich in der cpp keinen default constructor einbaue sondern nur in der .h<br />
gibts auch keine warning ... warum?</p>
</blockquote>
<p>Solange nirgends der Standardkonstruktor gebraucht wird, gibt's keinen Fehler.<br />
Vielleicht könntest du eine globale Instanz dieser Klasse verwenden für den Standardkonstruktor verwenden.</p>
<p>Ein bisschen Code dieser print-Klasse wäre gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871008</guid><dc:creator><![CDATA[Bruder Lustig]]></dc:creator><pubDate>Thu, 18 Mar 2010 18:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 20:00:04 GMT]]></title><description><![CDATA[<p>naja da gibts nicht viel zu sehen:</p>
<pre><code class="language-cpp">//Y.h
class Y
{
private:
  Y(const Y&amp; quelle);
  Y &amp;operator=(const Y&amp; quelle);
public:
  Y();
  virtual ~Y() throw();
  void print1(const char* a, ...) const;
  void print2(const char* a, ...) const;
};

//Y.cpp
Y::Y(){}
void Y::print1(const char* a, ...) const
{
  std::cout &lt;&lt; a &lt;&lt; std::endl;
}
void Y::print2(const char* a, ...) const
{
  std::cout &lt;&lt; a &lt;&lt; std::endl;
}
Y::~Y()throw(){}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1871016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871016</guid><dc:creator><![CDATA[diego2k]]></dc:creator><pubDate>Thu, 18 Mar 2010 20:00:04 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 19:33:24 GMT]]></title><description><![CDATA[<p>diego2k schrieb:</p>
<blockquote>
<p>naja da gibts nicht viel zu sehen:</p>
</blockquote>
<p>Deine Codes machen alle hinten und vorne keinen Sinn...</p>
<p>Kannst du mal etwas mehr Code per Copy&amp;Paste posten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871026</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 18 Mar 2010 19:33:24 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 19:40:46 GMT]]></title><description><![CDATA[<p>diego2k schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//Y.h
class Y
{
private:
  X(const X&amp; quelle);
  X &amp;operator=(const X&amp; quelle);
public:
  X();
  virtual ~X() throw();
  void print1(const char* a, ...) const;
  void print2(const char* a, ...) const;
};
</code></pre>
</blockquote>
<p>Mal davon abgesehen, dass Du hier ein paar Xs stehen hast, die Ys hätten sein sollen: Was soll das? Was ist der Sinn dieser Klasse? Warum hat sie keine Datenelemente? Warum hat sie einen virtuellen Destruktor und sonst nichts anderes virtuelles? Wozu ist das gut? Soll das so eine Art &quot;Interface&quot; (im Java-Sinne)? Dann hättest Du vergessen, print1 und print2 pur virtuell zu machen. Dann wären aber auch Deine Deklarationen von copy_ctor und op= überflüssig.</p>
<p>Wann soll wo wie ein Y erstellt werden, wenn Du den Default-Ctor von X benutzen willst? Und wer soll das Ding wieder löschen?</p>
<p>So kann man Dir nicht helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871031</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 18 Mar 2010 19:40:46 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 20:10:59 GMT]]></title><description><![CDATA[<p>hubs da haben sich ein paar Y in X verwandelt.</p>
<p>naja das ist die Vorgabe ob das jetzt sinn macht oder nicht ... sie darf nicht angefasst werden...</p>
<p>in meiner Klasse X soll jedenfalls genau das ein Member sein:<br />
Y&amp; bla_;</p>
<pre><code class="language-cpp">class X
{
private:
Y&amp; bla_;
char* _text;
public: 
X();
X(Y&amp; bla);
X(Y&amp; bla, const char* text);
void setText(const char* text);
const char * getText() const {return _text;}
}
</code></pre>
<p>der &quot;text&quot; gehört natürlich Dyn. verwaltet, darum möchte ich im Constructor wenigstens ein &quot;&quot; drauf tun...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871041</guid><dc:creator><![CDATA[diego2k]]></dc:creator><pubDate>Thu, 18 Mar 2010 20:10:59 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 21:00:46 GMT]]></title><description><![CDATA[<p>Weiters habe ich noch ein porblem:</p>
<pre><code class="language-cpp">class Z
{
public: 
  bool add(const X&amp; meinX);
};
</code></pre>
<pre><code class="language-cpp">class X
{
private:
  Y&amp; bla_;
  char* _text;
  Z* _meinZ;
public: 
  X();
  X(Y&amp; bla);
  X(Y&amp; bla, const char* text);
  void setText(const char* text);
  const char * getText() const {return _text;}
}
</code></pre>
<p>ich würde bei Z ein include für X brauchen und bei X ein include für Z.<br />
Was aber natürlich nicht funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871065</guid><dc:creator><![CDATA[diego2k]]></dc:creator><pubDate>Thu, 18 Mar 2010 21:00:46 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 21:19:49 GMT]]></title><description><![CDATA[<blockquote>
<p>ich würde bei Z ein include für X brauchen und bei X ein include für Z.</p>
</blockquote>
<p>Du würdest bei keinem ein include für keins brauchen, da du in der Klassendefinition von Z nur eine Referenz von X brauchst, reicht eine Deklaration von X, also einfach noch <em>class X;</em> vor die Klassendefinition schreiben.</p>
<p>In der Klassendefinition von X brauchst du auch nur einen Zeiger auf Z, weswegen wieder eine Deklaration von Z reicht (<em>class Z;</em>).</p>
<p>In den Implementierungsdateinen musst du dann natürlich inkludieren, weil du wahrscheinlich auf Member der jeweils anderen Klasse zugreifen möchtest, aber wenn du include guards verwendest, ist das kein Problem mehr.</p>
<p>Aber was ist das eigentlich für eine Aufgabe? Die Klassen sind hochgradig sinnlos und auch der Code ist seltsam. Was soll z.B. hier die variable Argumentenliste:</p>
<pre><code class="language-cpp">void Y::print1(const char* a, ...) const
</code></pre>
<p>Hat der Lehrer/Dozent euch nichts dazu gesagt? Was sollt ihr anhand dieser Übung lernen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871074</guid><dc:creator><![CDATA[Bruder Lustig]]></dc:creator><pubDate>Thu, 18 Mar 2010 21:19:49 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 21:32:36 GMT]]></title><description><![CDATA[<p>Bruder Lustig schrieb:</p>
<blockquote>
<p>Was sollt ihr anhand dieser Übung lernen?</p>
</blockquote>
<p>Wie man Code <strong>nicht</strong> schreiben sollte. <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>
<p>Edit: Ja ist nicht grad das beste Kommentar. Aber mir fehlen da echt die Worte. Einen Standard-Konstruktor aber eine Referenz auf ein externes Objekt...</p>
<p>Derjenige der sich das ausgedacht hat gehört gelyncht...</p>
<p>Arme Studenten/Schüler..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871083</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Thu, 18 Mar 2010 21:32:36 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 22:02:23 GMT]]></title><description><![CDATA[<p>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="🙂"
    /> <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="🙂"
    /> <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>Naja ich hab jetzt doch schon ein paar Jahre mit C# und Java zu<br />
tun gehabt und eigentlich fühle ich mit in der oop recht wohl...<br />
Aber diese Übung <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>Das ganze sieht für mich so aus als hätte hier irgendwer ein Programm geschrieben,<br />
dann einige Seiten rausgelöscht und die Aufgabe ist jetzt, dass wieder herzustellen.(es sind nur mehr dieses Y und die Main vorhanden von 7 Klassen und natürlich diese &quot;Tipps&quot; welche Methoden und Attribute drin sind)</p>
<p>Natürlich darf der Code der noch hier steht nicht verändert werden und es dürfen auch keine Klassen oder Methoden dazuerfunden werden.<br />
Wär ja noch okay, wenn irgendwo stehen würde was das Prgogramm gemacht hat ...<br />
aber diese Codeüberbleibsel sind ja auch nur ein Teil eines größeren Programms ...</p>
<p>naja is mal was neues <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/1871102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871102</guid><dc:creator><![CDATA[diego2k]]></dc:creator><pubDate>Thu, 18 Mar 2010 22:02:23 GMT</pubDate></item><item><title><![CDATA[Reply to class in class initialisieren on Thu, 18 Mar 2010 22:07:40 GMT]]></title><description><![CDATA[<p>Dann zeig doch mal die main, evtl. brauchst du ja gar keinen Standardkonstruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871106</guid><dc:creator><![CDATA[Bruder Lustig]]></dc:creator><pubDate>Thu, 18 Mar 2010 22:07:40 GMT</pubDate></item></channel></rss>