<?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[Dynamisches Erzeugen von Objekten in der OOP durch Variable???]]></title><description><![CDATA[<p>Hi,</p>
<p>haben Hausaufgaben aufebekommen unsere Klasse (reale Schulklasse hehe) als C++ Klasse in OOP zu amchen.<br />
Nun habe ich einige Unterprogramme inkl. Menüführung durch switch-case gemacht. Im Menü ist der Punkt: &quot;Schüler erstellen&quot;. Nun will ich die Anzahl abfragen und durch eine dynamische Erzeugung des Objektes erstellen.<br />
Der Compiler meckert aber weil er eine Konstante erwartet.<br />
Kann ich das Problem übergehen oder muss ich die Art der Mnüführung in soweit ändern, dass ich einen Schüler nach dem anderen erstellen lassen muss und der Benutzer nun nur noch entscheiden kann ob er einen weiteren erstellen will oder nicht (do-Schleife) ???</p>
<p>Unterfunktion zum schreiben von Schuelern</p>
<pre><code class="language-cpp">void schErzeugen(void)
{
  int anzahl=0;
  cout &lt;&lt; &quot;Bitte Anzahl der zu erstellenden Schueler eingeben: &quot;;
  cin &gt;&gt; anzahl;
  ITA2C *Schueler[anzahl];
  cout &lt;&lt; &quot;Taste druecken um ins Hauptmenue zurueck zu kommen&quot;;
  getch();
  clrscr();
  menu();
}
</code></pre>
<p>Auszug aus der Klasse ITA2C</p>
<pre><code class="language-cpp">class ITA2C
{
  private:
   string name;
   string vorname;
   int note_prg;
   int note_mathe;
   int fehlstunden;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/134398/dynamisches-erzeugen-von-objekten-in-der-oop-durch-variable</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 16:26:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134398.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Jan 2006 18:23:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamisches Erzeugen von Objekten in der OOP durch Variable??? on Wed, 25 Jan 2006 18:23:39 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>haben Hausaufgaben aufebekommen unsere Klasse (reale Schulklasse hehe) als C++ Klasse in OOP zu amchen.<br />
Nun habe ich einige Unterprogramme inkl. Menüführung durch switch-case gemacht. Im Menü ist der Punkt: &quot;Schüler erstellen&quot;. Nun will ich die Anzahl abfragen und durch eine dynamische Erzeugung des Objektes erstellen.<br />
Der Compiler meckert aber weil er eine Konstante erwartet.<br />
Kann ich das Problem übergehen oder muss ich die Art der Mnüführung in soweit ändern, dass ich einen Schüler nach dem anderen erstellen lassen muss und der Benutzer nun nur noch entscheiden kann ob er einen weiteren erstellen will oder nicht (do-Schleife) ???</p>
<p>Unterfunktion zum schreiben von Schuelern</p>
<pre><code class="language-cpp">void schErzeugen(void)
{
  int anzahl=0;
  cout &lt;&lt; &quot;Bitte Anzahl der zu erstellenden Schueler eingeben: &quot;;
  cin &gt;&gt; anzahl;
  ITA2C *Schueler[anzahl];
  cout &lt;&lt; &quot;Taste druecken um ins Hauptmenue zurueck zu kommen&quot;;
  getch();
  clrscr();
  menu();
}
</code></pre>
<p>Auszug aus der Klasse ITA2C</p>
<pre><code class="language-cpp">class ITA2C
{
  private:
   string name;
   string vorname;
   int note_prg;
   int note_mathe;
   int fehlstunden;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/976256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976256</guid><dc:creator><![CDATA[Kovu]]></dc:creator><pubDate>Wed, 25 Jan 2006 18:23:39 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Erzeugen von Objekten in der OOP durch Variable??? on Wed, 25 Jan 2006 19:49:40 GMT]]></title><description><![CDATA[<p>Kovu schrieb:</p>
<blockquote>
<p>Der Compiler meckert aber weil er eine Konstante erwartet.</p>
</blockquote>
<p>Deswegen musst du hier manuell Speicher reservieren. Dies kannst du von Hand erledigen:</p>
<pre><code class="language-cpp">int main()
{
    size_t x;
    cin &gt;&gt; x;
    size_t* dyn_arr = new size_t[x]; // hier muss x nicht zur compile-Zeit bekannt sein.

    // mach was mit dyn_arr.

    delete[] dyn_arr; // nicht vergessen, den Speicher wieder freizugeben.
}
</code></pre>
<p>Google diesbezüglich eventuell nach new/new[] und delete/delete[] für mehr Infos.</p>
<p>Ansonsten kannst du auch std::vector verwenden, einen Kontainer aus der STL. Mit ihm arbeitest du wie mit einem &quot;normalen&quot; Array, nur das er den Speicher selbstverwaltet, sprich, du musst dich nicht darum kümmern wie viele Elemente dein std::vector aufnehmen muss, etc.</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976332</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Wed, 25 Jan 2006 19:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Erzeugen von Objekten in der OOP durch Variable??? on Wed, 25 Jan 2006 19:55:17 GMT]]></title><description><![CDATA[<p>Sry aber mein OOP ist noch nciht so gut das ich das sofort verstehe.</p>
<p>Also size_t is deine Klasse und X dein Objekt oder?<br />
Wie kannst du den dann aber ein Objekt einlesen?</p>
<p>Bin voll verwirrt -.-*</p>
<p>Bitte mal ne genau Erklärung was was ist oder am besten meine Klasse verwenden, so kann ich das nachvollziehen was du tust. Sorry!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976339</guid><dc:creator><![CDATA[Kovu]]></dc:creator><pubDate>Wed, 25 Jan 2006 19:55:17 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Erzeugen von Objekten in der OOP durch Variable??? on Wed, 25 Jan 2006 20:06:45 GMT]]></title><description><![CDATA[<p>Kovu schrieb:</p>
<blockquote>
<p>Also size_t is deine Klasse und X dein Objekt oder?</p>
</blockquote>
<p>size_t ist ein Typ (meistens ein typdef auf unsigned long/int), welcher große ganzahlige, positive Werte aufnehmen kann.</p>
<blockquote>
<p>Wie kannst du den dann aber ein Objekt einlesen?</p>
</blockquote>
<p>size_t ist meistens kein Objekt. Man kann aber ein Objekt einlesen, wenn man die I/O-Operatoren für selbiges überlädt :).</p>
<blockquote>
<p>Bitte mal ne genau Erklärung was was ist oder am besten meine Klasse verwenden, so kann ich das nachvollziehen was du tust. Sorry!!!</p>
</blockquote>
<pre><code class="language-cpp">int main()
{
    unsigned int x;
    cin &gt;&gt; x;
    ITA2C* dyn_arr = new ITA2C[x]; // sizeof(x * Objekte) Byte Speicher reservieren und den Ctor von jedem Objekt ITA2C aufrufen.

    // mach was mit dyn_arr.

    delete[] dyn_arr; // nicht vergessen, den Speicher wieder freizugeben.
}
</code></pre>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976346</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Wed, 25 Jan 2006 20:06:45 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Erzeugen von Objekten in der OOP durch Variable??? on Wed, 25 Jan 2006 20:07:08 GMT]]></title><description><![CDATA[<p>ich habs grad mal gemacht mit arrays</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

using namespace std;

class Student // Schülerklasse
{
	string name;
	bool idiot;
};

int main() // int!!! main()
{	
	int numStudents = 0; // Anzahl Schüler
	Student *students = NULL; // Zeiger auf Schülerarray

	cout &lt;&lt; &quot;Wie viele Schüler haben wir denn? &quot; &lt;&lt; flush; // Ausgabe
	cin &gt;&gt; numStudents; // Eingabe

	students = new Student[numStudents]; // Ausreichend Speicher für Schülerarray anfordern und Zeiger darauf setzen

	/* mach was */

	delete[] students; // Aufräumen

	return 0; // Windows sagen, dass das Programm ohne Probleme beendet wurde
}
</code></pre>
<p>Aber du solltest dir auf jeden Fall mal Vektoren aus der STL anschauen. Sind <strong>viel</strong> handlicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976350</guid><dc:creator><![CDATA[xindon]]></dc:creator><pubDate>Wed, 25 Jan 2006 20:07:08 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Erzeugen von Objekten in der OOP durch Variable??? on Wed, 25 Jan 2006 20:13:58 GMT]]></title><description><![CDATA[<p>Cool, wieder was gelernt ^^ Danke.</p>
<pre><code class="language-cpp">Student *students = NULL;
students = new Student[numStudents];
</code></pre>
<p>auch zusammenfassbar in</p>
<pre><code class="language-cpp">Student *students = new Student[numStudents];
</code></pre>
<p>???</p>
<p>Und</p>
<pre><code class="language-cpp">unsigned int x;
</code></pre>
<p>gleich wie</p>
<pre><code class="language-cpp">size_t x;
</code></pre>
<p>???</p>
<p>Und jetzt noch die wahrscheinlich meistgehasste Frage jeden Programmierers: Warum?</p>
<p>Warum klappt es bei mir nciht und warum bei euch? Was hat das mit Zeiger auf sich? (Möchte es gerne klipp und klar verstehen, weil es mir später sonst nichts bringt, ok?)</p>
<p>danke nochmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976359</guid><dc:creator><![CDATA[Kovu]]></dc:creator><pubDate>Wed, 25 Jan 2006 20:13:58 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Erzeugen von Objekten in der OOP durch Variable??? on Wed, 25 Jan 2006 20:22:28 GMT]]></title><description><![CDATA[<p>xindon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int main() // int!!! main()
</code></pre>
</blockquote>
<p><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="😕"
    /> Hat irgend wer was verbrochen?</p>
<blockquote>
<pre><code class="language-cpp">int numStudents = 0; // Anzahl Schüler
	Student *students = NULL; // Zeiger auf Schülerarray
</code></pre>
</blockquote>
<p>In C++ gibt es neuerdings ein Feauture, das es erlaubt Variablen &quot;auch mal&quot; nicht am Anfang einer Funktion zu deklarieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<blockquote>
<pre><code class="language-cpp">cout &lt;&lt; &quot;Wie viele Schüler haben wir denn? &quot; &lt;&lt; flush; // Ausgabe
	cin &gt;&gt; numStudents; // Eingabe
</code></pre>
</blockquote>
<p>Das flush ist hier unötig, da automatisch beim Wechsel zwischen Input und Output-Streams der Puffer geflushed wird.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11727">@Kovu</a>:</p>
<p>Kovu schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Student *students = NULL;
students = new Student[numStudents];
</code></pre>
<p>auch zusammenfassbar in</p>
<pre><code class="language-cpp">Student *students = new Student[numStudents];
</code></pre>
</blockquote>
<p>Jup. Ist Imho sogar schöner.</p>
<blockquote>
<pre><code class="language-cpp">unsigned int x;
</code></pre>
<p>gleich wie</p>
<pre><code class="language-cpp">size_t x;
</code></pre>
</blockquote>
<p>Muss afaik nicht zwangsläufig so sein (oder?). Siehe eventuell in stddeff.h nach dem korrekten Typ. (Es schadet allerdings nichts, wenn du davon ausgehst, dass size_t soetwas wie unsigned int ist :)).</p>
<blockquote>
<p>Warum klappt es bei mir nciht und warum bei euch? Was hat das mit Zeiger auf sich? (Möchte es gerne klipp und klar verstehen, weil es mir später sonst nichts bringt, ok?)</p>
</blockquote>
<p>Was klappt bei dir nicht? Desweiteren empfehle ich dir in einem Buch deiner Wahl noch mal dynamische Speicherverwaltung uvam durchzulesen :).</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976370</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Wed, 25 Jan 2006 20:22:28 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Erzeugen von Objekten in der OOP durch Variable??? on Wed, 25 Jan 2006 20:33:27 GMT]]></title><description><![CDATA[<p>Kovu schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Student *students = NULL;
students = new Student[numStudents];
</code></pre>
<p>auch zusammenfassbar in</p>
<pre><code class="language-cpp">Student *students = new Student[numStudents];
</code></pre>
</blockquote>
<p>Ich mags halt lieber oben schön mit null initialisiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>----</p>
<p>Kovu schrieb:</p>
<blockquote>
<p>Warum klappt es bei mir nciht und warum bei euch?</p>
</blockquote>
<pre><code class="language-cpp">ITA2C *Schueler[anzahl];
</code></pre>
<p>Ich hab keine Ahnung, was das sein soll. Vielleicht en Zeigerarray oder sowas *g*.</p>
<p>Du fordest dort ja gar keinen neuen Speicher an.<br />
Das musst du mit new machen, weil zur Compilezeit unbekannt ist, wie viel Speicher das Programm benötigen wird.<br />
Den angeforderten Speicher solltest/musst du am Ende wieder mit delete freigeben.</p>
<p>In meinem Code habe ich es ja extra kommentiert:<br />
Es wird passend Speicher angefordert und der Zeiger wird darauf gesetzt.<br />
Jetzt kannst du den Zeiger benutzen, um auf das Array zuzugreifen, weil du jetzt weißt, <strong>wo</strong> es steht, nachdem es erstellt wurde.</p>
<p>Kovu schrieb:</p>
<blockquote>
<p>Cool, wieder was gelernt ^^ Danke.</p>
</blockquote>
<p>Jap, das ist cool <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="🙂"
    /> und vorallem sehr wichtig. Gut so :&gt;</p>
<p>-----</p>
<blockquote>
<blockquote>
<pre><code class="language-cpp">cout &lt;&lt; &quot;Wie viele Schüler haben wir denn? &quot; &lt;&lt; flush; // Ausgabe
	cin &gt;&gt; numStudents; // Eingabe
</code></pre>
</blockquote>
<p>Das flush ist hier unötig, da automatisch beim Wechsel zwischen Input und Output-Streams der Puffer geflushed wird.</p>
</blockquote>
<p>Boa du, das sind doch so Kleinigkeiten *g*. So gravierend ist ein flush bestimmt nicht :&gt;</p>
<p>-------</p>
<blockquote>
<p>In C++ gibt es neuerdings ein Feauture, das es erlaubt Variablen &quot;auch mal&quot; nicht am Anfang einer Funktion zu deklarieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>In größen Projekten mach ich das auch so. Nur in so kleinen Dingern find iche es einfach übersichtlicher, weil man weiß, was für Variablen benutzt werden.</p>
<p>-------</p>
<p>Caipi schrieb:</p>
<blockquote>
<p>xindon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int main() // int!!! main()
</code></pre>
</blockquote>
<p><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="😕"
    /> Hat irgend wer was verbrochen?</p>
</blockquote>
<p>Es gibt doch fast jeden Tag 3 Threads wo ein Anfänger void main() benutzt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976375</guid><dc:creator><![CDATA[xindon]]></dc:creator><pubDate>Wed, 25 Jan 2006 20:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Erzeugen von Objekten in der OOP durch Variable??? on Wed, 25 Jan 2006 20:49:37 GMT]]></title><description><![CDATA[<p>void main? das ist lol ^^</p>
<p>Naja gut.</p>
<p>Bedanke für an alle und proge fein weiter...</p>
<p>das nächste Prob kommt bestimmt. Alles Gute ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/976394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/976394</guid><dc:creator><![CDATA[Kovu]]></dc:creator><pubDate>Wed, 25 Jan 2006 20:49:37 GMT</pubDate></item></channel></rss>