<?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[using derektiven innerhalb von Klassen]]></title><description><![CDATA[<p>Hey ihr,</p>
<p>Jetzt, wo ich schon dabei bin viele Klassen selbst zu schreiben, hab ich gedacht, dass es ja dumm ist immer oberhalb der Headerdateien using namespace std; zu schreiben, da das nur unnötig RAM belegt.<br />
Somit hab ich mir gedacht innerhalb meiner Klassen using derektiven anzulegen.<br />
Also zum Beispiel so:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
class Hallo
{
   using std::string;
   string hey;       
};
int main()
{

}
</code></pre>
<p>Man könnte somit an den Anfang nur die gebrauchten Objekte bekanntgeben.<br />
Allerdings gibts so einen Fehler:</p>
<blockquote>
<p>5 C:\Dokumente und Einstellungen\Praktikant\Eigene Dateien\header.cpp using-declaration for non-member at class scope</p>
</blockquote>
<p>Allerdings müsste das ja gehen, nach alldem, was ich über namensräume gelesen habe^^</p>
<p>Bis später</p>
<p>David</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205799/using-derektiven-innerhalb-von-klassen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 14:32:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205799.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Feb 2008 09:39:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 09:39:16 GMT]]></title><description><![CDATA[<p>Hey ihr,</p>
<p>Jetzt, wo ich schon dabei bin viele Klassen selbst zu schreiben, hab ich gedacht, dass es ja dumm ist immer oberhalb der Headerdateien using namespace std; zu schreiben, da das nur unnötig RAM belegt.<br />
Somit hab ich mir gedacht innerhalb meiner Klassen using derektiven anzulegen.<br />
Also zum Beispiel so:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
class Hallo
{
   using std::string;
   string hey;       
};
int main()
{

}
</code></pre>
<p>Man könnte somit an den Anfang nur die gebrauchten Objekte bekanntgeben.<br />
Allerdings gibts so einen Fehler:</p>
<blockquote>
<p>5 C:\Dokumente und Einstellungen\Praktikant\Eigene Dateien\header.cpp using-declaration for non-member at class scope</p>
</blockquote>
<p>Allerdings müsste das ja gehen, nach alldem, was ich über namensräume gelesen habe^^</p>
<p>Bis später</p>
<p>David</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458026</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Mon, 18 Feb 2008 09:39:16 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 09:49:08 GMT]]></title><description><![CDATA[<p>Du solltest in headern ausserhalb von Klassen so oder so moeglichst auf using-direktiven verzichten. Sobald du naemlich den header irgendwo einbindest, gilt die using-direktive auch fuer alles was hinter dem eingebundenen header kommt, einschliesslich weiterer header. Das kann zu unerwuenschten Nebeneffekten fuehren.<br />
Das using in Klassendefinitionen fuehrt Namen und methoden in die jeweilige Klasse ein, meist aus Basisklassen, z.B.:</p>
<pre><code class="language-cpp">class C {
public:
  virtual void Foo();
  void Foo(int);
  void Foo(int, int);
};

class D : public C {
  void Foo();  //verdeckt C::Foo(int) und C::Foo(int, int)
  using C::Foo; //macht die beiden wieder sichtbar
};
</code></pre>
<p>Da du einen header eigentlich nur einmal konzeptionierst und ihn dann nurnnoch selten erweiterst (ist schliesslich das Interface zum Rest der Welt, das relativ stabil sein sollte), solltest du das bisschen tipparbeit nicht scheuen und jedesmal std::string schreiben.<br />
Ich persoenlich machs meist so, dass ich erstmal nur sstring oder sowas schreibe und das dann spaeter mit simpler Textersetzung in std::string umwandle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458032</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 18 Feb 2008 09:49:08 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 10:14:56 GMT]]></title><description><![CDATA[<p>Deine Argumente sind mir teilweise auch schon eingefallen und in meinem Buch begegnet.<br />
Dann würd ich sagen, schreib ich ab jetzt immer std:: davor.<br />
Aber dennoch würde mich interessieren, warum ich überhaupt in meinem geposteten Beispiel Probleme habe...-.-^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458051</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Mon, 18 Feb 2008 10:14:56 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 10:58:11 GMT]]></title><description><![CDATA[<p>Weil du mit der using-Direktive behauptest, dass du std::string als member hast (nicht ein objekt von dem Typ, sondern den Typen selber). Da std::string aber ein externer Typ ist, der mit deiner Klasse erstmal so garnichts zu tun hat, weiss der Compiler nicht, wie er das als Member machen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458078</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 18 Feb 2008 10:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 11:25:06 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>... hab ich gedacht, dass es ja dumm ist immer oberhalb der Headerdateien using namespace std; zu schreiben, da das nur unnötig RAM belegt.</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="😕"
    /> <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="😕"
    /><br />
ohoh, da müssen wir aber mal was klar stellen. &quot;using namespace std;&quot; belegt keinen RAM. es sollte auch eigentlich nicht deine executable aufblähen. namespaces sind etwas intimes zwischen dir und deinem compiler. <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="😉"
    /> das hat nichts mit dem späteren maschinencode zu tun, und erst recht nicht mit deiner CPU.</p>
<p>und das nochmal zu verdeutlichen, stell dir mal die frage:<br />
WO bitte wird bei using namespace std; speicherplatz für eine variable/ein objekt/einen pointer, was auch immer, reserviert? o.O falls du weiterhin auf deine these bestehst...kannst du mir sagen, wieviel sizeof(std) ist? x))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458090</guid><dc:creator><![CDATA[hey]]></dc:creator><pubDate>Mon, 18 Feb 2008 11:25:06 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 12:38:55 GMT]]></title><description><![CDATA[<p>hey schrieb:</p>
<blockquote>
<p>777 schrieb:</p>
<blockquote>
<p>... hab ich gedacht, dass es ja dumm ist immer oberhalb der Headerdateien using namespace std; zu schreiben, da das nur unnötig RAM belegt.</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="😕"
    /> <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="😕"
    /><br />
ohoh, da müssen wir aber mal was klar stellen. &quot;using namespace std;&quot; belegt keinen RAM. ...</p>
</blockquote>
<p>Doch - im Editor ! <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458149</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 18 Feb 2008 12:38:55 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 12:44:33 GMT]]></title><description><![CDATA[<p>Dann wird also nur deswegen von der using namespace direktive abgeraten, weil es dann zu namenskonflikten kommen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458151</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Mon, 18 Feb 2008 12:44:33 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 12:56:06 GMT]]></title><description><![CDATA[<p>using namespace direktiven sind im grunde genommen nur Arbeitshilfen fuer tippfaule. Folgendes Beispiel zeigt, was so eine using-Direktive im header anstellen kann:</p>
<pre><code class="language-cpp">/// HeaderA.h /////////////////

#include &lt;iostream&gt;
using namespace std; //ab jetzt guckt der compiler auch in std nach

/*...*/

/// HeaderB.h ////////////////
class pair {
  //eine eigene pair-Klasse die nichts mit dem std::pair zu tun hat
};

/// main.cpp /////////////////
#include &quot;HeaderB.h&quot;
#include &quot;HeaderA.h&quot; //oops, jetzt guckt der compiler auch hier in std nach,
#include &quot;HeaderC.h&quot; //auch beim parsen von HeaderC !!

int main() {
  pair p; //welches denn? mein eigenes oder std::pair?
}
</code></pre>
<p>Man kann sich vorstellen, dass solch ein unerwartetes Verhalten teils die Bedeutung eines ganzen Programms aendern kann. Der Autor von HeaderC haette es z.B. nicht vorhersehen koennen, dass beim Parsen seines headers im namespace std nachgeschaut wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458159</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 18 Feb 2008 12:56:06 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 12:57:47 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Dann wird also nur deswegen von der using namespace direktive abgeraten, weil es dann zu namenskonflikten kommen kann?</p>
</blockquote>
<p>Genauer: Weil Du damit Namenskonflikte bei Benutzern Deines Headers (natürlich auch bei Dir selbst) verursachen kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458160</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 18 Feb 2008 12:57:47 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 13:05:27 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Dann wird also nur deswegen von der using namespace direktive abgeraten, weil es dann zu namenskonflikten kommen kann?</p>
</blockquote>
<p>Was heißt hier &quot;nur&quot; ?<br />
Solche Namenskonflikte können eine Software fast komplett unbrauchbar machen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458163</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 18 Feb 2008 13:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Mon, 18 Feb 2008 13:39:40 GMT]]></title><description><![CDATA[<p>Und einen bei der Fehlersuche in den Wahnsinn treiben! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1458192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458192</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 18 Feb 2008 13:39:40 GMT</pubDate></item><item><title><![CDATA[Reply to using derektiven innerhalb von Klassen on Tue, 19 Feb 2008 07:26:45 GMT]]></title><description><![CDATA[<p>Okay- dann werd ich das ab jetzt unterlassen und nur in sehr kurzen und übersichtlichen Programmen nehmen^^Danke für eure Hilfe xD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1458575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1458575</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Tue, 19 Feb 2008 07:26:45 GMT</pubDate></item></channel></rss>