<?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[problem bei objekterzeugung zur Laufzeit - Zeichenprogramm]]></title><description><![CDATA[<p>Hallo,<br />
ich bin gerade dabei eine kleine Zeichensoftware(einfach nur zur Übung) als Konsolenanwendung unter Windows XP SP2 mit MS Visual C++ 2008 Express Edition zu schreiben, mit der man verschiedene geometrische Grundformen zeichnen kann.</p>
<p>ich versuche gerade eine Funktion zu implementieren, mit der ich zur Laufzeit einige Attribute ändern kann(z.B. Füllfarbe, Größe usw.);</p>
<p>Das Problem dabei ist Folgendes:Zur Kompile-Zeit kann das Programm natürlich nicht wissen, welche Objekte der Benutzer später erzeugen wird, erst zur Laufzeit. Deshalb können natürlich auch die benötigten Objekte (z.B. Kreise, Linien, ...) erst zur Laufzeit erzeugt werden.</p>
<p>In der Funktion, die zur Laufzeit die Methoden zur Änderung der Attributwerte ausführen soll, müssen die jeweiligen Methoden ja in Abhängigkeit von der auszuführenden Aktion angegeben werden.</p>
<p>dabei entsteht folgender Fehler:<br />
(Code auf das Wesentliche reduziert)</p>
<pre><code class="language-cpp">//beispiel anhand eines kreises:
class Kreis
{
int radius;
COORD Mittelpunkt;
int füllfarbe;
//...

//Konstruktor:
Kreis(int p_radius, COORD p_Mittelpunkt, int p_füllfarbe)
{
füllfarbe=p_füllfarbe;
Mittelpunkt=p_Mittelpunkt;
radius=p_radius;
}
//Methoden:

void zeichnen()
{
//gekürzt da der Codeabschnitt funktioniert
}

//zB Füllfarbe setzen:
void setze_füllfarbe(int neue_farbe)
{
//code aus api um farbe zu setzen, hier gekürzt da er problemlos funktioniert
}
}

int main()
{
cout&lt;&lt;&quot;Was möchten Sie tun?(1:zeichnen, 2:farbe ändern)\n&quot;;
int eingabe;
cin&gt;&gt;eingabe;
if(eingabe==1)
{
//stark vereinfacht:
cout&lt;&lt;&quot;geben Sie Radius, Füllfarbe und Mittelpunkt ein!\n&quot;;
int radius, füllfarbe, x_mittelpunkt, y_mittelpunkt;
cin&gt;&gt;radius&gt;&gt;füllfarbe&gt;&gt;x_mittelpunkt&gt;&gt;y_mittelpunkt;
COORD Mittelpunkt={x_mittelpunkt, y_mittelpunkt};

//aufruf des Konstruktors:
Kreis k1(radius, Mittelpunkt, füllfarbe);//initialisierung k1
}

if(eingabe==2)
{
k1.setze_füllfarbe(füllfarbe)/*&lt;---- genau hier entsteht das problem!   */
}
}
</code></pre>
<p>Der Compiler sagt k1 sei ein unbekannter Bezeichner und .setze_füllfarbe müsse sich auf eine Klasse beziehen. damit hat er ja auch recht da k1 zur kompile-tzeit noch unbakannt ist, aber ich kann das Objekt doch erst zur Laufzeit erstellen!<br />
Denn der Benutzer wird nicht versuchen Attributwerte eines nicht existierenden Objekts zu ändern und es erst erstellen. Somit ist das Objekt zum Zeitpunkt des Funktionsaufrufes zur Laufzeit dann ja auch rechtzeitig bekannt. Aber dem Kompiler ist das Objekt zur Kompile-zeit ja unbekannt.</p>
<p>-Kann man so eine Fehlermeldung irgendwie ignorieren oder irgendwie trotzdem kompilern? denn zur Laufzeit würde ja kein Fehler entstehen!</p>
<p>-ich habe auch schon versucht das problem mit mehrdimmendionalen Arrays zu lösen, erfolglos. denn wenn ich diese auf dem stack allokiere habe ich sehr schnell einen stack overflow und auf dem heap würden sie auch nur viel platz benötigen. außerdem ist der Code mit Klassen einfach vile besser lesbar^^</p>
<p>kann man also den fehler irgendwie beim Kompilern ignorieren oder das Problem a nderweitig lösen?</p>
<p>EDIT: das Problem muss aber mit Klassen zu lösn sein da viele Zeichenprogramme mit Klassen arbeiten.</p>
<p>danke schonmal,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257210/problem-bei-objekterzeugung-zur-laufzeit-zeichenprogramm</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 11:11:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257210.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Dec 2009 19:18:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Thu, 24 Dec 2009 20:25:56 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich bin gerade dabei eine kleine Zeichensoftware(einfach nur zur Übung) als Konsolenanwendung unter Windows XP SP2 mit MS Visual C++ 2008 Express Edition zu schreiben, mit der man verschiedene geometrische Grundformen zeichnen kann.</p>
<p>ich versuche gerade eine Funktion zu implementieren, mit der ich zur Laufzeit einige Attribute ändern kann(z.B. Füllfarbe, Größe usw.);</p>
<p>Das Problem dabei ist Folgendes:Zur Kompile-Zeit kann das Programm natürlich nicht wissen, welche Objekte der Benutzer später erzeugen wird, erst zur Laufzeit. Deshalb können natürlich auch die benötigten Objekte (z.B. Kreise, Linien, ...) erst zur Laufzeit erzeugt werden.</p>
<p>In der Funktion, die zur Laufzeit die Methoden zur Änderung der Attributwerte ausführen soll, müssen die jeweiligen Methoden ja in Abhängigkeit von der auszuführenden Aktion angegeben werden.</p>
<p>dabei entsteht folgender Fehler:<br />
(Code auf das Wesentliche reduziert)</p>
<pre><code class="language-cpp">//beispiel anhand eines kreises:
class Kreis
{
int radius;
COORD Mittelpunkt;
int füllfarbe;
//...

//Konstruktor:
Kreis(int p_radius, COORD p_Mittelpunkt, int p_füllfarbe)
{
füllfarbe=p_füllfarbe;
Mittelpunkt=p_Mittelpunkt;
radius=p_radius;
}
//Methoden:

void zeichnen()
{
//gekürzt da der Codeabschnitt funktioniert
}

//zB Füllfarbe setzen:
void setze_füllfarbe(int neue_farbe)
{
//code aus api um farbe zu setzen, hier gekürzt da er problemlos funktioniert
}
}

int main()
{
cout&lt;&lt;&quot;Was möchten Sie tun?(1:zeichnen, 2:farbe ändern)\n&quot;;
int eingabe;
cin&gt;&gt;eingabe;
if(eingabe==1)
{
//stark vereinfacht:
cout&lt;&lt;&quot;geben Sie Radius, Füllfarbe und Mittelpunkt ein!\n&quot;;
int radius, füllfarbe, x_mittelpunkt, y_mittelpunkt;
cin&gt;&gt;radius&gt;&gt;füllfarbe&gt;&gt;x_mittelpunkt&gt;&gt;y_mittelpunkt;
COORD Mittelpunkt={x_mittelpunkt, y_mittelpunkt};

//aufruf des Konstruktors:
Kreis k1(radius, Mittelpunkt, füllfarbe);//initialisierung k1
}

if(eingabe==2)
{
k1.setze_füllfarbe(füllfarbe)/*&lt;---- genau hier entsteht das problem!   */
}
}
</code></pre>
<p>Der Compiler sagt k1 sei ein unbekannter Bezeichner und .setze_füllfarbe müsse sich auf eine Klasse beziehen. damit hat er ja auch recht da k1 zur kompile-tzeit noch unbakannt ist, aber ich kann das Objekt doch erst zur Laufzeit erstellen!<br />
Denn der Benutzer wird nicht versuchen Attributwerte eines nicht existierenden Objekts zu ändern und es erst erstellen. Somit ist das Objekt zum Zeitpunkt des Funktionsaufrufes zur Laufzeit dann ja auch rechtzeitig bekannt. Aber dem Kompiler ist das Objekt zur Kompile-zeit ja unbekannt.</p>
<p>-Kann man so eine Fehlermeldung irgendwie ignorieren oder irgendwie trotzdem kompilern? denn zur Laufzeit würde ja kein Fehler entstehen!</p>
<p>-ich habe auch schon versucht das problem mit mehrdimmendionalen Arrays zu lösen, erfolglos. denn wenn ich diese auf dem stack allokiere habe ich sehr schnell einen stack overflow und auf dem heap würden sie auch nur viel platz benötigen. außerdem ist der Code mit Klassen einfach vile besser lesbar^^</p>
<p>kann man also den fehler irgendwie beim Kompilern ignorieren oder das Problem a nderweitig lösen?</p>
<p>EDIT: das Problem muss aber mit Klassen zu lösn sein da viele Zeichenprogramme mit Klassen arbeiten.</p>
<p>danke schonmal,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827445</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Thu, 24 Dec 2009 20:25:56 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Thu, 24 Dec 2009 23:55:29 GMT]]></title><description><![CDATA[<p>Abgesehen von einer Menge Syntax-fehler glaube ich den Fehler gefunden zu haben. Der Compiler kann k1 nicht mehr kennen, da die Variable nicht mehr im Sichtbarkeitsfeld liegt wenn du k1 zum zweiten mal schreibst. Du deklarierst die Variable in der ersten abfrage, doch wenn dieser Scope beendet wird werden auch sämtliche Variablen gelöscht!</p>
<p>von daher existiert die Variable nicht mehr darum kennt dein Compiler sie nicht, du müsstest also den Kreis vor der ersten abfrage deklarieren.</p>
<p>Allerdings würde ich dir dringend anraten Vererbung und Polymorphie anzuschauen, damit kannst du dein Prgramm sehr leicht und elegant lösen ohne Codeduplikation oder lästigem Abfragen. Wenn du versuchst mit deiner Methode weitere Graphikklassen hinzuzufügen wirst du sehr viele Probleme bekommen und keinen schönen Code, da du eben nicht weist was der User haben möchte und welche Funktionen er aufruft. Wenn du sämtliche Objekte als Zeiger auf die Basisklasse deklarierst hast du den Vorteil, dass du nicht zu wissen brauchst welches Objekt der User erstellt hat, du brauchst nur die in der Basisklasse definierten virtuellen funktionen aufzurufen und der Rest geschieht vom selben, das richtige Objekt wird verändert/gezeichnet auch wenn du oder dein Code nicht weiß welches Objekt er gerade behandelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827523</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Thu, 24 Dec 2009 23:55:29 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 07:55:01 GMT]]></title><description><![CDATA[<p>ah ok. Jetzt hab ich das auch verstanden, k1 wurde ja nach Ende der if-Bedingung gelöscht <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>das mit den Syntaxfehlern ist klar da der code nicht aus dem programm kopier sondern gester nur schnell geschrieben wurde als Beispiel hier, aber derselbe Fehler besteht tatsächlich auch im Originalcode.</p>
<p>Und das mit der Vererbung ist so eine Sache da jede Klasse andére Attribute besitzt(z.B, eine Linie keinen Radius) und auch andere Zeichenmethoden braucht usw. deshalb ist der code eigentlich für jede Klasse ganz anders^^ bei der Vererbung würden ja einfach methoden und attribute kopiert werden^^</p>
<blockquote>
<p>du müsstest also den Kreis vor der ersten abfrage deklarieren</p>
</blockquote>
<p>das geht ja aber nicht da der Konstruktor daten des Kreises braucht, die ich erst nach der Abfrage weiß <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Damit kann ich das Objekt erst nach oder während der Abfrage erstellen.</p>
<p>danke,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827568</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 07:55:01 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 08:18:18 GMT]]></title><description><![CDATA[<p>schau Dir mal &quot;new&quot; und &quot;delete&quot; an..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827573</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Fri, 25 Dec 2009 08:18:18 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 14:19:45 GMT]]></title><description><![CDATA[<p>mein Problem ist eigentlich nur, dass das Objekt Kreis mit Ende der if-bedingung den gültigkeitsbereich verlässt, deshalb bkleibt eigtnlich nur eine Frage:</p>
<p>-wie kann ich innerhalb einer Funktion/Bedingung ein <strong>globales</strong> Objekt erzeugen??</p>
<p>(mit new wird das objekt ja nicht global.)</p>
<p>mfg,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827710</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 14:19:45 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 14:38:02 GMT]]></title><description><![CDATA[<p>Du brauchst kein globales Objekt. <code>new</code> und <code>delete</code> sind schon okay.</p>
<pre><code class="language-cpp">Kreis* k1;
if (/*...*/)
{
   // ...
   k1 = new Kreis(/* Konstruktor-Argumente */);
}
k1-&gt;VerwendeKreis();
delete k1;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1827716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827716</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 25 Dec 2009 14:38:02 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 16:08:45 GMT]]></title><description><![CDATA[<p>danke! das war genau das was ich suchte, das Deklerieren vom Aufruf des Konstruktors zu trennen.damit ist dieses Problem gelöst.</p>
<p>(auch wenn das jetzt nich in diesen thread gehört, aber ich will deswegen keinen neuen eröffnen:)</p>
<p>noch eine kleine Frage:kann man irgendwie überpfrüfen, ob ein objekt schon existiert?<br />
(die rage ergab sich aus dem zeichenprogramm, hier ein kleines beispiel:)</p>
<pre><code class="language-cpp">class Kreis
{
//...
};

void kreiszeichnen()
{
  //objekt erzeugen:
  if(/*objekt kreis 1 existiert schon und kreis 2 noch nicht*/)
  {
    Kreis k2;
  }
  else
  {
    Kreis k1;
  }
}

int main()
{
  kreis_zeichnen();
}
</code></pre>
<p>wie kann ich jetzt also prüfen ob es das objekt k1 schon gibt und ich somit mit k2 weitermachen muss?</p>
<p>danke,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827735</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 16:08:45 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 15:14:24 GMT]]></title><description><![CDATA[<p>Setze den Zeiger auf Null, solange du kein gültiges zugehöriges Objekt hast.</p>
<p>Und rücke bitte nächstes Mal vernünftig ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827737</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 25 Dec 2009 15:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 16:26:20 GMT]]></title><description><![CDATA[<p>ok, habe ich auch vertanden <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>allerdings ist beim test der obigen Methode ein Fehler bei der Kompilierung aufgetaucht:</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class Kreis
{
  public:
  int radius;
  //Konstruktor:
  Kreis(int p_radius)
  {
    radius=p_radius;
  }
  //Beispielmethode:
  void ausmalen()
  {
    //Code zum Ausmalen
  }
};

Kreis* k1=NULL;

int main()
{
  //...
  k1=new Kreis(radius);//klappt soweit fehlerfrei
  //nur die folgende zeile mag der Compiler nicht:
  k1.ausmalen();
}
</code></pre>
<p>bei der genannten Zeile sagt der Compiler: error C2228: Links von &quot;.ausmalen&quot; muss sich eine Klasse/Struktur/Union befinden.&quot;; k1 ist aber doch Objekt der Klasse Kreis! was ist denn falsch?</p>
<p>und noch ne ganz kleine Frage: ein Destruktor für die Klasse Kreis ist hier nicht unbedingt nötig, oder?</p>
<p>mfg,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827771</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 16:26:20 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 16:29:02 GMT]]></title><description><![CDATA[<p>Nein. k1 ist vom Typ: &quot;Zeiger auf Kreis&quot;. Das ist völliger Unterschied. <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>Aber die Handhabung ist denkbar einfach.</p>
<pre><code class="language-cpp">k1-&gt;ausmalen(); // bedeutet: (*k1).ausmalen();
</code></pre>
<p>Der -&gt; Operator dereferenziert dir den Zeiger und dann hast du etwas vom Typ &quot;Kreis&quot; und wendet den . Operator drauf an. (Achtung: der -&gt; Operator kann überladen werden und somit theoretisch eine völlig andere Bedeutung haben, als die ausgeschriebene Variante; ist aber eher unüblich, ausser bei Smart Pointer).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827772</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 25 Dec 2009 16:29:02 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 16:33:09 GMT]]></title><description><![CDATA[<p>Und vergiss das <code>delete</code> nicht, wenn du mit <code>new</code> Speicher anforderst!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827774</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 25 Dec 2009 16:33:09 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 16:48:07 GMT]]></title><description><![CDATA[<p>wird der speicher nicht nach programmende automatisch freigegeben? naja, offensichtlich nicht <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>ist es dann nicht doch soinnvoll einen destruktor zu schreiben?</p>
<p>mfg,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827783</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 16:48:07 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 16:52:32 GMT]]></title><description><![CDATA[<p>andi01 schrieb:</p>
<blockquote>
<p>wird der speicher nicht nach programmende automatisch freigegeben? naja, offensichtlich nicht <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>
</blockquote>
<p>Wahrscheinlich schon, aber es ist 1. nicht garantiert, und 2. ist es schlechter Stil und führt nur dazu, dass die Regel an anderen Orten auch nicht beachtet wird. Merk dir einfach, dass zu jedem <code>new</code> ein <code>delete</code> und zu jedem <code>new[]</code> ein <code>delete[]</code> gehört (von Dingen wie Smart-Pointern mal abgesehen).</p>
<p>andi01 schrieb:</p>
<blockquote>
<p>ist es dann nicht doch soinnvoll einen destruktor zu schreiben?</p>
</blockquote>
<p>Nein, das hat damit nichts zu tun. In der Klasse selbst forderst du nirgends Speicher vom Freestore an, der standardgenerierte Destruktor tut das Richtige.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827784</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 25 Dec 2009 16:52:32 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 16:52:53 GMT]]></title><description><![CDATA[<p>andi01 schrieb:</p>
<blockquote>
<p>wird der speicher nicht nach programmende automatisch freigegeben? naja, offensichtlich nicht <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>ist es dann nicht doch soinnvoll einen destruktor zu schreiben?</p>
<p>mfg,<br />
andi01.</p>
</blockquote>
<p>Doch wahrscheinlich schon, aber das ist Sache des Betriebssystems, ob das gemacht wird. Also verlass dich nicht drauf!</p>
<p>Destruktoren machen durchaus Sinn, aber in dem Falle hier bringt dir das nix, weil delete this keine gute Idee ist. (überleg dir dazu, was so aufgerufen wird, wenn ein Objekt zerstört wird. ;))</p>
<p>Du kannst eine Klasse schreiben, die dir das Obejkt mit new erzeugt und dann im Destruktor das löschen vornimmt. Das ist eine gute Idee und nennt sicht dann Smart Pointer. (google danach, für weiteres).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827786</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 25 Dec 2009 16:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 17:27:56 GMT]]></title><description><![CDATA[<p>ok, so weit habe ich das jetzt auch verstanden <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>(um keinen neuen thread eröffnen zu müssen die letzte kleine frage bezüglich des Zeichenprogramms auch noch schnell hier <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>ist es auch möglich den Benutzer zB den Namen eines objekts eingeben zu lassen und das dann zu erzeugen?</p>
<p>ich dachte mir das etwa so:</p>
<pre><code class="language-cpp">class Kreis
{
    public:
    int radius;
};

int main()
{
    cout&lt;&lt;&quot;Geben Sie den Namen des zu erzeugenden Objekts ein!\n&quot;;
    string name;
    cin&gt;&gt;name;
    //Kreis mit eingegebenem Namen erzeugen, ka wie^^(z.B. Kreis name =new Kreis?) 
}
</code></pre>
<p>Hintergrund ist dass es das programm erheblich vereinfachen müsste da ich die ganzen objektnamen nicht selbst vergeben muss und auch nicht bei jedem Objekterstellen den passenden Namen(zB k1/k2/...) suchen müsste^^</p>
<p>geht das irgendwie?</p>
<p>mfg,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827792</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 17:27:56 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 17:33:13 GMT]]></title><description><![CDATA[<p>Das grundlegende Prinzip, dass du suchst sind natürlich Arrays. Allerdings bietet sich da wahrscheinlich ein Standardbibliothek Container eher an.</p>
<p>vector:<br />
<a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow">http://www.cplusplus.com/reference/stl/vector/</a></p>
<p>oder aber eben, wenn der Name wirklich wichtig ist:</p>
<p>map:<br />
<a href="http://www.cplusplus.com/reference/stl/map/" rel="nofollow">http://www.cplusplus.com/reference/stl/map/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827797</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 25 Dec 2009 17:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 17:45:28 GMT]]></title><description><![CDATA[<p>ich weiß, ich könnte das schon mit einer art arrays lösen. das problem ist das macht den code recht unübersichtlich(in Klassen sind ja zB auch zugehörige methoden/attribute usw. auf den ersten blick erkennbar, das macht den code besser lesbar^^)</p>
<p>Außerdem würde das doch unglaublich speicher verbrauchen wenn man alle parameter in multidimensionale arrays packt:</p>
<pre><code class="language-cpp">//kreis[name][radius][x_mittelpunkt][y_mittelpunkt][füllfarbe]:
string kreis [100][100][100][100];
</code></pre>
<p>wenn man das mit allen nötigen parameter für alle klassen macht braucht das einiges an speicherplatz^^</p>
<p>deshalb wollte ih das ganze eigentlich mit Klassen und Objekten lösen, aber das mit dem Namen eingeben funktioniert da wohl definitiv nicht, oder?</p>
<p>mfg,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827803</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 17:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 17:44:58 GMT]]></title><description><![CDATA[<p>andi01 schrieb:</p>
<blockquote>
<p>deshalb wollte ih das ganze eigentlich mit Klassen und Objekten lösen, aber das mit dem Namen eingeben funktioniert da wohl definitiv nicht, oder?</p>
</blockquote>
<p>Äh, doch.</p>
<p>Nicht ohne Grund hat dich drakon auf <code>std::map</code> hingewiesen. Als Ergänzung hilft dir vielleicht <a href="http://magazin.c-plusplus.net/artikel/Aufbau%20der%20STL%20-%20Teil%201%3A%20Container" rel="nofollow">dieser Artikel</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827806</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 25 Dec 2009 17:44:58 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 17:53:44 GMT]]></title><description><![CDATA[<p>d.h. wenn das obere Codebeispiel funktionieren soll müsste ich alle Attribute der einzelnen vorherigen Objekte in solchen maps speichern?</p>
<p>Wenn nicht wie soll das denn dann funktionieren?hätte vielleicht mal jemand in kleines codebeispiel(nur so lang wie oben, das erstellen eines objekts mit dem eingegebenen Namen würde ja schon reichen <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>mfg,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827809</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 17:53:44 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 17:53:13 GMT]]></title><description><![CDATA[<p>andi01 schrieb:</p>
<blockquote>
<p>Außerdem würde das doch unglaublich speicher verbrauchen wenn man alle parameter in multidimensionale arrays packt:</p>
<pre><code class="language-cpp">//kreis[name][radius][x_mittelpunkt][y_mittelpunkt][füllfarbe]:
string kreis [100][100][100][100];
</code></pre>
<p>wenn man das mit allen nötigen parameter für alle klassen macht braucht das einiges an speicherplatz^^</p>
</blockquote>
<p>?!<br />
Für etwas hast du ja eine Klasse, wo du die Parameter drin speichern kannst..</p>
<p>Im übrigen ist das eh nicht das, was du denkst, dass es ist..<br />
Da wird ein Array von Arrays von Arrays von Arrays erstellt. 100^4. Viel Spass. <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/1827810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827810</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 25 Dec 2009 17:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 17:58:24 GMT]]></title><description><![CDATA[<p>solangsam wird das ganz schön kompliziert^^.</p>
<p>hätte vielleicht mal jemand einen kleinen Codeschnipsel? das erstellen eines objekts mit dem eingegebenen namen würde ja schon reichen^^</p>
<p>eigentlich nräuchte ich nur ein kleines beispiel wie man den namen eines objekts eingeben kann und dieses dann erstellen.</p>
<p>mfg,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827811</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 17:58:24 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 17:58:18 GMT]]></title><description><![CDATA[<p>andi01 schrieb:</p>
<blockquote>
<p>Wenn nicht wie soll das denn dann funktionieren?hätte vielleicht mal jemand in kleines codebeispiel(nur so lang wie oben, das erstellen eines objekts mit dem eingegebenen Namen würde ja schon reichen <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>
</blockquote>
<p>Objektorientiert heisst eben, dass du gemeinsame Attribute zu einem Objekt zusammenpackst. Dann brauchst du auch keine vierdimensionalen Arrays.</p>
<pre><code class="language-cpp">class Kreis
{
    public:
        // Konstruktoren etc.

    private:
        float   radius;
        Farbe   fuellfarbe; // Farbe ist eine andere Klasse von dir
        Vector2 mittelpunkt; // Vector2 ist eine andere Klasse mit 2 floats
};
</code></pre>
<pre><code class="language-cpp">std::map&lt;std::string, Kreis&gt; kreise;
// wie du nun Kreise einfügst, findest du in den Links zu std::map.
// bitte diese LESEN!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1827812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827812</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 25 Dec 2009 17:58:18 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 18:08:11 GMT]]></title><description><![CDATA[<p>ok, dass heißt ich kann die klassen behalten. die eingegebenen objektnamen müsste ich dannin irgendeinen container (zB map) packen. soweit klar.</p>
<p>nur wie man dann aus der map die objekte konstruiert habe ich noch nicht gefunden. ich schaue mir die links nochmal genauer an^^</p>
<p>mfg,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827816</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 18:08:11 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 18:57:58 GMT]]></title><description><![CDATA[<p>hm irgendiwe ist mir noch nicht ganz klar wie ich aus der namensliste (zB map) die Objekte erstellen soll. ein kleines Beispiel wäre nicht schlecht <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>danke,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827826</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Fri, 25 Dec 2009 18:57:58 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Fri, 25 Dec 2009 19:11:56 GMT]]></title><description><![CDATA[<p>In der map sind Objekte drin. Die werden beim einfügen erstellt.</p>
<p>Einfügen kannst du z.B mit der Memberfunktion <a href="http://www.cplusplus.com/reference/stl/map/insert/" rel="nofollow">insert</a> oder gleich mit dem [] Operator:</p>
<p><a href="http://www.cplusplus.com/reference/stl/map/operator%5B%5D/" rel="nofollow">http://www.cplusplus.com/reference/stl/map/operator[]/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827833</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 25 Dec 2009 19:11:56 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei objekterzeugung zur Laufzeit - Zeichenprogramm on Sat, 26 Dec 2009 10:04:09 GMT]]></title><description><![CDATA[<p>ok, habs kapiert <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>danke allen für die hilfe,<br />
andi01.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1827927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1827927</guid><dc:creator><![CDATA[andi01]]></dc:creator><pubDate>Sat, 26 Dec 2009 10:04:09 GMT</pubDate></item></channel></rss>