<?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[Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen.]]></title><description><![CDATA[<p>Hallu Forum</p>
<p>Ursprünglich gehöre ich eigentlich der Java Fraktion an, aus verschiedensten Gründen möchte ich aber jetzt ein Projekt mit Microsoft Visual C++<br />
2005 realisieren. Das Objektmodell von C++ ist mir eigentlich auch bekannt, aber ich schaffe es nicht unter Visual C++ eine Klasse zu schreiben<br />
und anschließend von dieser ein Objekt zu erzeugen, um u.A. auf die Globalen variablen des Objektes zuzugreifen</p>
<p>Aufruf:<br />
rr r = new rr();</p>
<p>rr.h</p>
<p>#pragma once</p>
<p>class rr<br />
{<br />
public:<br />
rr(void);<br />
public:<br />
~rr(void);<br />
};</p>
<p>&quot;error C2440: 'Initialisierung': 'rr *' kann nicht in 'rr' konvertiert werden<br />
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig&quot;</p>
<p>--&gt; Was in Gottes Namen ist denn überhaubt so ein Stern Objekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318767/zu-blöde-um-objekt-zu-erzeugen-und-auf-pub-variable-zuzugreifen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 19:54:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318767.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Jul 2013 18:51:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Thu, 25 Jul 2013 18:51:55 GMT]]></title><description><![CDATA[<p>Hallu Forum</p>
<p>Ursprünglich gehöre ich eigentlich der Java Fraktion an, aus verschiedensten Gründen möchte ich aber jetzt ein Projekt mit Microsoft Visual C++<br />
2005 realisieren. Das Objektmodell von C++ ist mir eigentlich auch bekannt, aber ich schaffe es nicht unter Visual C++ eine Klasse zu schreiben<br />
und anschließend von dieser ein Objekt zu erzeugen, um u.A. auf die Globalen variablen des Objektes zuzugreifen</p>
<p>Aufruf:<br />
rr r = new rr();</p>
<p>rr.h</p>
<p>#pragma once</p>
<p>class rr<br />
{<br />
public:<br />
rr(void);<br />
public:<br />
~rr(void);<br />
};</p>
<p>&quot;error C2440: 'Initialisierung': 'rr *' kann nicht in 'rr' konvertiert werden<br />
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig&quot;</p>
<p>--&gt; Was in Gottes Namen ist denn überhaubt so ein Stern Objekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341291</guid><dc:creator><![CDATA[string*34*]]></dc:creator><pubDate>Thu, 25 Jul 2013 18:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Thu, 25 Jul 2013 18:57:24 GMT]]></title><description><![CDATA[<p>string[34] schrieb:</p>
<blockquote>
<p>--&gt; Was in Gottes Namen ist denn überhaubt so ein Stern Objekt?</p>
</blockquote>
<p>Ein Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341296</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 25 Jul 2013 18:57:24 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Thu, 25 Jul 2013 19:02:52 GMT]]></title><description><![CDATA[<p>Wenn du ja anscheinend Wissen hast was Visual C++ angeht wirst du mir doch sicher sagen können wie man jetzt auf eine Variable des Objektes zugreift?</p>
<p>Ich weiß das in dem beispiel von mir keine drinnen ist, aber auch wenn eine unter Public definiert währe kommt trotzdem eine Fehlermeldung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341299</guid><dc:creator><![CDATA[string*34*]]></dc:creator><pubDate>Thu, 25 Jul 2013 19:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Thu, 25 Jul 2013 19:20:33 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u18363" rel="nofollow">Jochen Kalmbach</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f58" rel="nofollow">C++/CLI mit .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x und C++11)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341311</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 25 Jul 2013 19:20:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Thu, 25 Jul 2013 19:37:58 GMT]]></title><description><![CDATA[<p>Als Javaumsteiger gilt erstmal die Regel &quot;new ist böse&quot;. Niemals verwenden. In Java ist new nötig, in C++ nicht.</p>
<p>Jetzt zu deinem Problem:</p>
<pre><code>struct rr{ //struct um den public:-Kram nicht zu brauchen
    //Konstruktoren und Destruktoren baut dir der Compiler automatisch
    int variable;
};

int main(){
    rr r; //das baut dir ein Objekt r vom Typ rr (Keine Referenz, daher kein new)
    r.variable = 5;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2341321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341321</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Thu, 25 Jul 2013 19:37:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Fri, 26 Jul 2013 07:04:37 GMT]]></title><description><![CDATA[<blockquote>
<p>aus verschiedensten Gründen möchte ich aber jetzt ein Projekt mit Microsoft Visual C++ 2005 realisieren.</p>
</blockquote>
<p>Ich hoffe, es ist einer dabei der die Version rechtfertigt...</p>
<blockquote>
<p>Das Objektmodell von C++ ist mir eigentlich auch bekannt, aber ich schaffe es nicht unter Visual C++ eine Klasse zu schreiben und anschließend von dieser ein Objekt zu erzeugen</p>
</blockquote>
<p>Widerspruch.</p>
<blockquote>
<p>auf die Globalen variablen des Objektes zuzugreifen</p>
</blockquote>
<p>Ein Objekt hat keine <em>globalen</em> Variablen. Du bringst die Begriffe durcheinander.</p>
<blockquote>
<p>Ursprünglich gehöre ich eigentlich der Java Fraktion an</p>
</blockquote>
<p>In C++ erzeugt man Objekte standardmäßig auf dem Stack, wo es aber aus verschiedenen Gründen nötig ist auch auf dem Heap ( <code>new</code> / <code>delete</code> , bzw. <a href="http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared" rel="nofollow">make_shared</a> und <a href="http://en.cppreference.com/w/cpp/memory" rel="nofollow">Konsorten</a>).<br />
Ein Objekt mit <em>automatic storage duration</em>, wie man es nennt, wird erzeugt sobald das Statement mit seiner Deklaration* im logischen Programmablauf durchlaufen wird.</p>
<pre><code>std::string str{&quot;ABC&quot;}; // direct-list-initialization. Objekt str vom Typ std::string wird erzeugt.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2341328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341328</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 26 Jul 2013 07:04:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Wed, 11 Jun 2014 22:48:03 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341337</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 11 Jun 2014 22:48:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Thu, 25 Jul 2013 20:27:26 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>In C++ erzeugt man Objekte standardmäßig auf dem Stack, wo es aber aus verschiedenen Gründen nötig ist auch auf dem Heap (new/delete, bzw. make_shared und Konsorten).<br />
Ein Objekt mit automatic storage duration, wie man es nennt, wird erzeugt sobald das Statement mit seiner Deklaration* im logischen Programmablauf durchlaufen wird.</p>
<pre><code>std::string str{&quot;ABC&quot;}; // direct-list-initialization. Objekt str vom Typ std::string wird erzeugt.
</code></pre>
</blockquote>
<p>Es ist prinzipiell gut, dass du auf den neuen Standard setzt, aber an Visual C++ 2005 wird der TE kein C++11 vorbeibekommen. Der kann nicht mal TR1.</p>
<p>Ansonsten hatte ich vor einer Weile die grundlegenden Unterschiede zwischen den Objektmodellen in C++ und Java zusammenzufassen versucht; das Posting befindet sich <a href="http://www.c-plusplus.net/forum/310833#2272984" rel="nofollow">hier</a>. Vielleicht hilft es ja beim Verständnis. Beachte: Ich beziehe mich da teilweise auch auf C++11-Features (std::unique_ptr und std::shared_ptr), die VC++2005 nicht beherrscht. Ggf. muss auf std::auto_ptr ausgewichen werden, und in <a href="http://www.boost.org" rel="nofollow">Boost</a> findet sich eine shared_ptr-Implementation, die auch mit alten Compilern funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341339</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 25 Jul 2013 20:27:26 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Fri, 26 Jul 2013 07:03:30 GMT]]></title><description><![CDATA[<p>Es ist mir klar - aber trotzdem egal. Der TE soll nun mal aktuelles C++ lernen, und nicht dabei von seinem Compiler aufgehalten werden. Vor allem regt es ihn dadurch an, sich eine aktuellere Version zu holen - als Hobby Programmierer ist das doch ein leichtes Stück... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2341376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341376</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 26 Jul 2013 07:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Fri, 26 Jul 2013 07:05:14 GMT]]></title><description><![CDATA[<p>string[34] schrieb:</p>
<blockquote>
<p>Wenn du ja anscheinend Wissen hast was Visual C++ angeht wirst du mir doch sicher sagen können wie man jetzt auf eine Variable des Objektes zugreift?</p>
</blockquote>
<p>Mit dem . Operator.</p>
<p>Was muss ich tun um dich davon zu überzeugen, dass du mit Java-Kenntnissen nicht automatisch C++ kannst? Du wirst die Sprache lernen müssen wie jeder andere auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341377</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 26 Jul 2013 07:05:14 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Fri, 26 Jul 2013 09:50:21 GMT]]></title><description><![CDATA[<p>string[34] schrieb:</p>
<blockquote>
<p>Ursprünglich gehöre ich eigentlich der Java Fraktion an, aus verschiedensten Gründen möchte ich aber jetzt ein Projekt mit Microsoft Visual C++<br />
2005 realisieren. Das Objektmodell von C++ ist mir eigentlich auch bekannt,</p>
<p>Aufruf:<br />
rr r = new rr();</p>
</blockquote>
<p>Ist doch klar, dass das so nicht geht. C++ und Java sind unterschiedlliche Programmiersprachen. Vergiss am besten all den &quot;OOP-Kram&quot;, den du aus Java kennst.</p>
<p>Ein wichtiger Unterschied ist, dass Java einem eine Indirektion für Klassentypen aufzwingt:</p>
<pre><code>int i = 23;              // i speichert 23 direkt
int j = i;               // j ist eine zweite int-Variable, die hier mit
                         // dem Wert von i initialisiert wird
i = 42;                  // j ist danach immer noch 23.

Object o = new Object(); // o speichert nur eine &quot;Referenz&quot; auf ein im
                         // &quot;dynamischen Speicher&quot; liegendes Objekt
Object p = o;            // Referenz p zeigt jetzt auf dasselbe Objekt wie o
</code></pre>
<p>Du hast also in Java ganz automatisch mit Zeigern zu tun. Die nennst du nur &quot;Referenzen&quot;.</p>
<p>In C++ bekommst du nur Zeiger, wenn du explizit danach fragst. Und man kann in C++ Objekte, wie auch ganz &quot;normale Variablen&quot; direkt halten:</p>
<pre><code class="language-cpp">std::string foo = &quot;world&quot;; // ein string-Objekt mit Namen foo
std::string bar = foo;     // ein komplett anderes string-Objekt mit Namen bar
foo = &quot;hello&quot;;
cout &lt;&lt; foo &lt;&lt; ' ' &lt;&lt; bar &lt;&lt; endl; // gibt &quot;hello world&quot; aus
</code></pre>
<p>Genauso, wie du int-Variablen neue Werte zuweisen kann, kannst du einem string-Objekt neue Werte zuweisen. Hier gibt es nirgens &quot;Referenzen&quot; oder &quot;Zeiger&quot;. Und genauso wenig, wie du oben für i und j kein <code>new</code> verwendet hast, brauchst du <code>new</code> in diesem Fall auch nicht. foo und bar sind hier zwei verschiedene String-Objekte, die im &quot;automatischen Speicher&quot; leben. Die Variablen/Objekte, die im &quot;automatischen Speicher&quot; liegen, werden automatisch sofort entfernt, wenn die Ausführung den Gültigkeitsbereich verlässt. die string-Klasse verwendet zwar intern dynamisch reservierten Speicher für die Zeichenkette, aber den kann sie auch ordnungsgemäß wieder freigeben. Das ist in C++ möglich, weil ein Klassenautor selbst festlegen kann, was passieren soll, wenn ein Objekt der Klasse kopiert, zugewiesen oder zerstört werden soll. Das ist mit das genialste Feature von C++ überhaupt.</p>
<p>Als von-Java-nach-C++-Umsteiger wirst du geneigt sein, viele Objekte per <code>new</code> anzulegen und auch als Datenelemente viele Zeiger zu verwenden, weil du es nicht anders kennst. In den meisten Fällen wird das jedoch eine sehr blöde Idee sein. Beispiel:</p>
<pre><code class="language-cpp">class Person
{
public:
  explicit Person(const char* n)
  {
    name = new string(n); // new legt ein OBjekt im Freispeicher an und
                          // gibt eine Adresse dafür zurück, welche sich
                          // in einer Zeiger-Variablen speichern lässt.
  }
private:
  string* name; // Zeiger auf ein string-Objekt
};
</code></pre>
<p>Das ist nicht nur ungeschickt, sondern führt auch zu Speicherlecks, weil zu jedem <code>new</code> irgendwo ein <code>delete</code> gehört. Das Einfügen eines Destruktors, in dem der String gelöscht wird, reicht nicht aus, um das Problem komplett zu beheben, Stichwort &quot;Dreierregel&quot;. Was ist jetzt besser? Na das hier:</p>
<pre><code class="language-cpp">class Person
{
public:
  explicit Person(const char* n)
  {
    name = n;
  }
private:
  string name; // &lt;-- kein Zeiger mehr! Warum auch?!
};
</code></pre>
<p>oder noch besser (mit Initialisierungsliste):</p>
<pre><code class="language-cpp">class Person
{
public:
  explicit Person(const char* n)
  : name(n)
  {}
private:
  string name;
};
</code></pre>
<p>Im vorherigen Beispiel wird das String-Objekt quasi vor der öffnenten geschweiften Klammer des Konstruktors &quot;default-konstruiert&quot; (leere Zeichenkette im Fall von string) und dann später einen neuen Wert zugewiesen. Im letzten Beispiel wird über die Initialisierungsliste das string-Objekt direkt mit einer Zeichenkette initialisiert. Und das ist gut so.</p>
<p>Ohne Zeiger kommt man in C++ relativ weit. Man kann ja all die Dinge aus der Standardbibliothek verwenden. Darunter gibt es die &quot;Container&quot;. Wenn du wirklich das brauchst, was der dynamische Speicher bietet, nämlich eigene Kontrolle über die Lebenszeit eines Objekts, dann kann man natürlich immer noch mit Zeigern oder Zeiger-ähnlichen Dingen arbeiten. Spätestens dann musst du dir vorher beim Design überlegen, wer so ein Objekt &quot;besitzt&quot;, also, wer dafür (inklusive Löschung) verantwortlich ist. In gutem C++ wirst du jedoch so gut wie nie ein <code>delete</code> finden und es ist trotzdem frei von Speicherlecks, weil man normalerweise die Verantwurtung/Verwaltung sofort irgend einem anderen Objekt überlässt so dass man sich darum nicht mehr selbst kümmern muss.</p>
<p>Ich habe vor C++ auch Java gelernt und kann dir empfehlen, dir ein gutes C++ Buch zu besorgen. Das lohnt sich! Aber bevor du zuschlägst, schau dir auch mal ein paar Buchempfehlungen an. Ein Amazon-Top-Seller kann gerade bei C++ Büchern, totaler Müll sein, weil der Autor dir eventuell C als C++ verkauft und die Neulinge, die dem zum Opfer fallen und gute Bewertungen abgehen, nicht wissen, wie &quot;gutes C++&quot; aussieht.</p>
<p>PS: VS 2005 ist uralt. Schnapp dir was neueres!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341414</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 26 Jul 2013 09:50:21 GMT</pubDate></item><item><title><![CDATA[Reply to Zu Blöde um Objekt zu erzeugen und auf pub Variable zuzugreifen. on Sat, 27 Jul 2013 10:51:07 GMT]]></title><description><![CDATA[<p>Habe <a href="http://www.amazon.de/dp/B00DUW4BMS" rel="nofollow">hier</a> gerade einmal durch die ersten Seiten geblättert. Es macht eine gute Figur gerade für Umsteiger, die schon Programmiererfahrung haben.</p>
<p>Es gibt sogar einen Abschnitt 1.3.4 &quot;Suggestions for Java programmers&quot;:</p>
<blockquote>
<p>C++ and Java are rather different languages with similar syntaxes. Their aims are significantly different and so are many of their application domains. Java is <em>not</em> a direct successor to C++ in the sense of a language that can do the same as its predecessor, but better and also more. To use C++ well, you need to adopt programming and design techniques appropriate to C++, rather than trying to write Java in C++. It's not an issue of remembering to <strong>delete</strong> objects that you create with <strong>new</strong> because you can't rely on the presence of a garbage collector:</p>
<ul>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
<p>Most of this advice applies equally to C# programmers.</p>
</blockquote>
<p><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>Nee, ich verdiene nix an dieser Werbung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2341642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2341642</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 27 Jul 2013 10:51:07 GMT</pubDate></item></channel></rss>