<?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[Klasse oder Objekt?]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Stimmt es eigentlich, dass die Verwendung eines Objektes nur dann Sinn macht, wenn die zugehörige Klasse mehrfach (min. 2x) instanziiert wird? Somit haben unterschiedliche Codeblöcke ein eigenes Objekt der Klasse und können somit zur Laufzeit ein Unikat der Klasse als Objekt erzeugen und die Methoden und Membervariablen dynamisch verwenden?</p>
<p>Denn würde von einer Klasse im gesammten Code nur eine einzige Instanziierung stattfinden, könnte man die Klasse, bzw. die Methoden und Membervariablen, doch auch gleich statisch deklarieren. Verstehe ich den Sinn von der statischen und dynamischen nutzung von Klassen und Objekten richtig? Falls nein, bitte ich um genaue Erläuterung, warum und vor allem wann, man ein Objekt nutzt und wann die Klasse selbst. Abstrakte Klassen sind hierbei ausgeschlossen, da sie der Polymorphie dienen und der Hintergrund ein anderer ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299775/klasse-oder-objekt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 03:12:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299775.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 18 Feb 2012 05:56:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse oder Objekt? on Sat, 18 Feb 2012 05:56:36 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Stimmt es eigentlich, dass die Verwendung eines Objektes nur dann Sinn macht, wenn die zugehörige Klasse mehrfach (min. 2x) instanziiert wird? Somit haben unterschiedliche Codeblöcke ein eigenes Objekt der Klasse und können somit zur Laufzeit ein Unikat der Klasse als Objekt erzeugen und die Methoden und Membervariablen dynamisch verwenden?</p>
<p>Denn würde von einer Klasse im gesammten Code nur eine einzige Instanziierung stattfinden, könnte man die Klasse, bzw. die Methoden und Membervariablen, doch auch gleich statisch deklarieren. Verstehe ich den Sinn von der statischen und dynamischen nutzung von Klassen und Objekten richtig? Falls nein, bitte ich um genaue Erläuterung, warum und vor allem wann, man ein Objekt nutzt und wann die Klasse selbst. Abstrakte Klassen sind hierbei ausgeschlossen, da sie der Polymorphie dienen und der Hintergrund ein anderer ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182559</guid><dc:creator><![CDATA[fg34]]></dc:creator><pubDate>Sat, 18 Feb 2012 05:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse oder Objekt? on Sat, 18 Feb 2012 06:30:01 GMT]]></title><description><![CDATA[<p>fg34 schrieb:</p>
<blockquote>
<p>Stimmt es eigentlich, dass die Verwendung eines Objektes nur dann Sinn macht, wenn die zugehörige Klasse mehrfach (min. 2x) instanziiert wird?</p>
</blockquote>
<p>Nein.<br />
Ob es in einem Programm nur ein Objekt einer Klasse gibt, oder ob es generell nur Sinn macht in einem Programm genau ein Objekt einer Klasse zu haben, sind zwei völlig unterschiedliche Dinge.</p>
<p>Nehmen wir also mal den zweiten Fall, ein Programm kann sinnvollerweise immer nur ein Objekt einer Klasse besitzen. (Dass man beim ersten Fall Klassen nimmt sollte wohl klar sein.) Aber auch dann gibt es einen Unterschied - Klassen können nämlich Kon- und Destruktoren haben.<br />
Dafür gibt es übrigens ein Pattern (bzw. mehrere Ansätze für dieses Pattern), genannt Singleton.</p>
<p>Aber eine Klasse die keine nichtstatischen Membervariablen* hat macht natürlich keinen Sinn, das ist eher Missbrauch von Klassen für Namespaces.</p>
<p>* + Keine virtuellen Funktionen, Konstruktoren oder Destruktoren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182562</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 18 Feb 2012 06:30:01 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse oder Objekt? on Sat, 18 Feb 2012 06:20:59 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Konst- und Destruktoren</p>
</blockquote>
<p>Kon- und Destruktoren würde ich mal vorschlagen. Ich hab mich zuerst gefragt was da const sein soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182566</guid><dc:creator><![CDATA[Bitte geben Sie einen Ben]]></dc:creator><pubDate>Sat, 18 Feb 2012 06:20:59 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse oder Objekt? on Sat, 18 Feb 2012 06:30:34 GMT]]></title><description><![CDATA[<p>Bitte geben Sie einen Ben schrieb:</p>
<blockquote>
<p>cooky451 schrieb:</p>
<blockquote>
<p>Konst- und Destruktoren</p>
</blockquote>
<p>Kon- und Destruktoren würde ich mal vorschlagen. Ich hab mich zuerst gefragt was da const sein soll.</p>
</blockquote>
<p>Tatsache. Ist verbessert. <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/2182568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182568</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 18 Feb 2012 06:30:34 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse oder Objekt? on Sat, 18 Feb 2012 07:13:56 GMT]]></title><description><![CDATA[<p>Danke für eure Beiträge. Sind es nicht die Objekte die den Konstruktor und Destruktor besitzen? Warum sollte die Klasse diesen auch nutzen? Die Klasse implementiert diesen nur. Oder etwa nicht? In einem Konstruktor werden ja z.B. Variablen und Zeiger Inizialisierungen vorgenommen. Mit der Klasse sollte das keinen Sinn machen, bzw. auch gar nicht funktionieren. Der Destruktor wird ja auch erst bei der Zerstörung eines Objektes aufgerufen und eine Klasse ist kein Objekt. Nur damit dies verständlicher wird.</p>
<p>Ich finde leider den Rest nicht ganz aufschlussreich. Du meinst also, dass eine Verwendung als Objekt wegen der Verfügbarkeit von Konstruktor und Destruktor Sinn macht, ja? Was genau wäre hier denn der Vorteil? Ich schrieb in meinem Beispiel ja von Unikat, was in etwa das beschreiben sollte. Mit einem Unikat der Klasse, also ein Objekt, kann man damit dynamisch Arbeiten. Änderungen am Objekt sind dann voneinander unabhängig, anderst bei der Verwendung von der Klasse selbst, also statisch in dem Sinne. Daher verstehe ich das nicht so ganz, solltest Du das anderst gemeint haben.</p>
<blockquote>
<p>Aber eine Klasse die keine nichtstatischen Membervariablen* hat macht natürlich keinen Sinn, das ist eher Missbrauch von Klassen für Namespaces.</p>
</blockquote>
<p>Du meinst wenn alle Membervariablen einer Klasse <strong>static</strong> deklariert sind? Warum sollte das ein Missbrauch einer Klasse sein? Sicher das es keinen Fall gibt, in dem dieses Szenario in einer Klasse vorkommt?</p>
<blockquote>
<p>* + Keine virtuellen Funktionen, Konstruktoren oder Destruktoren.</p>
</blockquote>
<p>Das verstehe ich nicht. Wenn eine Klasse <strong>keine</strong> virtuellen Methoden hat? Meinst Du nicht eher das Gegenteil? Warum ist eine Klasse mit reinen Methoden ein Missbrauch seiner selbst? Und warum setzt Du Konstruktoren und Destruktoren voraus? Es gibt ja auch den Standard Konstruktor und Destruktor. Ich habe viele Klassen, in denen ich weder vom Konstruktor noch Destruktor gebrauch mache. Ist das Deiner Meinung nach nun falsch?</p>
<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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182572</guid><dc:creator><![CDATA[fg34]]></dc:creator><pubDate>Sat, 18 Feb 2012 07:13:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse oder Objekt? on Sat, 18 Feb 2012 07:47:25 GMT]]></title><description><![CDATA[<p>Ich frage sonst mal konkreter:</p>
<ol>
<li>Wann und warum verwendet man Objekte oder die Klasse selbst?</li>
<li>Wann nutzt man Objekte auf dem Heap und wann auf dem Stack.</li>
<li>Wann sollte eine Methode statisch sein?</li>
</ol>
<p>Meine eigenen Antworten:</p>
<ol>
<li>
<p>Objekte sollten dann verwendet werden, wenn die Methoden und Membervariablen in ihrer Verwendung unabhängig von der Klasse bzw. anderen Objekten gebraucht werden. &quot;Unikate Verwendung eines Klassenabbildes&quot;. Spielt dies keine Rolle, kann eine Klasse je nach Situation auch ohne ein Objekt benutzt werden. Zu beachten wäre hier jedoch, das beinahe alles statisch deklariert werden muss. Wann genau das Sinn macht, kann ich gerade nicht sagen.</p>
</li>
<li>
<p>Ich denke man sollte Objekte dynamisch erzeugen, wenn der Speicher auf dem Stack dafür grenzwertig ist und natürlich auch dann, wenn ein Objekt eine längere Laufzeit als die Funktion, die das Objekt erzeugt hat, besitzen soll, um mit Zeigern auf das Objekt zugreifen zu können.</p>
</li>
<li>
<p>Statische Methoden kann man, so finde ich, immer dann verwenden, wenn für die Abarbeitung in der Methode kein this Zeiger, also somit Zugriff auf Membervariablen stattfindet. Somit kann die Methode auch schnell und einfach ohne ein Objekt benutzt werden, was den Rest der Klasse in seinem Entwurf aber unberührt lässt.</p>
</li>
</ol>
<p>Ich würde nun gerne mal eure drei Meinungen zu den drei Fragen lesen. Und bitte listet alles auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182574</guid><dc:creator><![CDATA[fg34]]></dc:creator><pubDate>Sat, 18 Feb 2012 07:47:25 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse oder Objekt? on Sat, 18 Feb 2012 08:08:04 GMT]]></title><description><![CDATA[<p>Hast du mal nach Singleton gegoogelt?</p>
<p>fg34 schrieb:</p>
<blockquote>
<p>Das verstehe ich nicht. Wenn eine Klasse <strong>keine</strong> virtuellen Methoden hat?</p>
</blockquote>
<p>Mir fällt keine sinnvolle Möglichkeit ein eine Klasse zu verwenden, die<br />
- Keine virtuellen Methoden bereitstellt.<br />
- Keine nichtstatischen Membervariablen hat.</p>
<p>fg34 schrieb:</p>
<blockquote>
<p>Wann und warum verwendet man Objekte oder die Klasse selbst?</p>
</blockquote>
<p>Wird oben quasi schon beantwortet. Unikat eines Objekts -&gt; Singleton. Sammlung von Funktionen / Konstanten -&gt; Namespace.</p>
<p>fg34 schrieb:</p>
<blockquote>
<ol start="2">
<li>Wann nutzt man Objekte auf dem Heap und wann auf dem Stack.</li>
</ol>
</blockquote>
<p>Man achtet darauf, dass die unterste Ebene <strong>immer</strong> auf dem Stack liegt. Objekte auf dem Heap <strong>nur</strong> durch Container und/oder Smartpointer* erstellen. (unique_ptr/shared_ptr)</p>
<p>fg34 schrieb:</p>
<blockquote>
<p>Wann sollte eine Methode statisch sein?</p>
</blockquote>
<p>Wenn sie keinen this Pointer braucht. Wenn du aber eine Klasse hast die nur aus statischen Methoden besteht, ist die Wahrscheinlichkeit hoch, dass du dein Design verkackt hast. <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 />
Da du ja bestimmt irgendein Problem im Hinterkopf hast könntest du das ja mal nennen, Beispiele helfen oft.</p>
<p>* Und auch nicht nicht direkt new nutzen, sondern make_shared und make_unique. (make_unique ist leider noch nicht im Standard vertreten, wird aber vielleicht bald nachgeliefert.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182578</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 18 Feb 2012 08:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse oder Objekt? on Sat, 18 Feb 2012 08:28:02 GMT]]></title><description><![CDATA[<p>fg34 schrieb:</p>
<blockquote>
<p>Ich frage sonst mal konkreter:</p>
<ol>
<li>Wann und warum verwendet man Objekte oder die Klasse selbst?</li>
<li>Wann nutzt man Objekte auf dem Heap und wann auf dem Stack.</li>
<li>Wann sollte eine Methode statisch sein?</li>
</ol>
<p>Meine eigenen Antworten:</p>
<ol>
<li>Objekte sollten dann verwendet werden, wenn die Methoden und Membervariablen in ihrer Verwendung unabhängig von der Klasse bzw. anderen Objekten gebraucht werden. &quot;Unikate Verwendung eines Klassenabbildes&quot;. Spielt dies keine Rolle, kann eine Klasse je nach Situation auch ohne ein Objekt benutzt werden. Zu beachten wäre hier jedoch, das beinahe alles statisch deklariert werden muss. Wann genau das Sinn macht, kann ich gerade nicht sagen.</li>
</ol>
</blockquote>
<p>Kann es sein, dass du vorher schon mit Java oder einer anderen Sprache, die keine freien Funktionen hat, gearbeitet hast. In C++ kann man Namespaces verwenden, anstatt eine &quot;Klasse&quot; die nur aus statischen Methoden besteht zu bauen.</p>
<blockquote>
<ol start="2">
<li>Ich denke man sollte Objekte dynamisch erzeugen, wenn der Speicher auf dem Stack dafür grenzwertig ist und natürlich auch dann, wenn ein Objekt eine längere Laufzeit als die Funktion, die das Objekt erzeugt hat, besitzen soll, um mit Zeigern auf das Objekt zugreifen zu können.</li>
</ol>
</blockquote>
<p>Im prinzip ja, aber man arbeitet eigentlich nicht mehr viel mit rohen Pointern, oft werden Smartpointer verwendet, die die Objekte selber aufräumen. Außerdem kann man in c++ Objekte auch per Referenz übergeben bzw. const ref.</p>
<blockquote>
<ol start="3">
<li>Statische Methoden kann man, so finde ich, immer dann verwenden, wenn für die Abarbeitung in der Methode kein this Zeiger, also somit Zugriff auf Membervariablen stattfindet. Somit kann die Methode auch schnell und einfach ohne ein Objekt benutzt werden, was den Rest der Klasse in seinem Entwurf aber unberührt lässt.</li>
</ol>
</blockquote>
<p>Wie gesagt namespaces.</p>
<p>cooky451 schrieb:</p>
<blockquote>
<p>Man achtet darauf, dass die unterste Ebene <strong>immer</strong> auf dem Stack liegt.</p>
</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="😕"
    /> Keine Ahnung, was die unterste Ebene eines Objektes sein soll, aber auch wenn du das meinst, was ich vermute, ist das <strong>immer</strong> quatsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182581</guid><dc:creator><![CDATA[HighendCoder]]></dc:creator><pubDate>Sat, 18 Feb 2012 08:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse oder Objekt? on Sat, 18 Feb 2012 09:06:44 GMT]]></title><description><![CDATA[<p>HighendCoder schrieb:</p>
<blockquote>
<p>cooky451 schrieb:</p>
<blockquote>
<p>Man achtet darauf, dass die unterste Ebene <strong>immer</strong> auf dem Stack liegt.</p>
</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="😕"
    /> Keine Ahnung, was die unterste Ebene eines Objektes sein soll, aber auch wenn du das meinst, was ich vermute, ist das <strong>immer</strong> quatsch.</p>
</blockquote>
<p>Die unterste Ebene des Objekts ist die erste (besitzende) Ebene die kein Klassenscope mehr ist. (Ausnahme sind natürlich static/globale Variablen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2182592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2182592</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 18 Feb 2012 09:06:44 GMT</pubDate></item></channel></rss>