<?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[C++ Klasse &#x2F; Dateien]]></title><description><![CDATA[<p>Hallo,<br />
ich weiß, die Frage kommt öfter und ich habe sie eigentlich glaube ich schon<br />
selber gestellt, aber jetzt wird sie wichtig, weil ich Quellcode<br />
veröffentlichen will (Ich bin ein ziemlicher Perfektionist! <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="😉"
    /> ). Also ich<br />
habe eine Klasse (was für ein Wunder in C++ <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="😃"
    /> ) und möchte jetzt wissen, wie<br />
ich den Code jetzt verpacken soll, heißt: soll ich alles in eine Datei<br />
schreiben, soll ich den Funktionskopf vom Rumpf trennen, oder zusammenlassen?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/216052/c-klasse-dateien</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 19:17:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/216052.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Jun 2008 15:02:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Wed, 18 Jun 2008 15:02:54 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich weiß, die Frage kommt öfter und ich habe sie eigentlich glaube ich schon<br />
selber gestellt, aber jetzt wird sie wichtig, weil ich Quellcode<br />
veröffentlichen will (Ich bin ein ziemlicher Perfektionist! <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="😉"
    /> ). Also ich<br />
habe eine Klasse (was für ein Wunder in C++ <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="😃"
    /> ) und möchte jetzt wissen, wie<br />
ich den Code jetzt verpacken soll, heißt: soll ich alles in eine Datei<br />
schreiben, soll ich den Funktionskopf vom Rumpf trennen, oder zusammenlassen?</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531669</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Wed, 18 Jun 2008 15:02:54 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Wed, 18 Jun 2008 15:05:41 GMT]]></title><description><![CDATA[<p>Normal kommt die Deklaration in den Header und der Code nur, wenn es inline sein soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531673</guid><dc:creator><![CDATA[wooooobaz]]></dc:creator><pubDate>Wed, 18 Jun 2008 15:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Wed, 18 Jun 2008 15:07:11 GMT]]></title><description><![CDATA[<p>Also eine *.cpp und eine *.h???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531674</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Wed, 18 Jun 2008 15:07:11 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Wed, 18 Jun 2008 15:26:54 GMT]]></title><description><![CDATA[<p>Korrekt,</p>
<p>außer templates, da lohnt sich eigentlich immer inline in der Header-Datei.<br />
Also aufspaltung in .h und .tcc und #include &quot;foo.tcc&quot; am ende der Header-Datei lohnt sich imho nicht.</p>
<p>Und zu .h und .cpp -&gt; Eine Klasse pro Modul (.h+.cpp) ist *meistens* sinnvoll.</p>
<p>Edit: ein &quot;nicht&quot; im 2. Satz hinzugefügt. <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/1531676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531676</guid><dc:creator><![CDATA[Xantus]]></dc:creator><pubDate>Wed, 18 Jun 2008 15:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Wed, 18 Jun 2008 15:18:37 GMT]]></title><description><![CDATA[<p>Was ist denn *.tcc? Hab noch nie gehört.</p>
<p>Zu .h und .cpp:<br />
Also:</p>
<p>bla.h</p>
<pre><code class="language-cpp">// Code

class bli {
public:
   void bla();
};

// Code
</code></pre>
<p>bla.cpp</p>
<pre><code class="language-cpp">// Code

void bli::bla() {
   // blub
}

// Code
</code></pre>
<p>Aber in welcher Dateien soll ich was inkludieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531685</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Wed, 18 Jun 2008 15:18:37 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Wed, 18 Jun 2008 15:38:00 GMT]]></title><description><![CDATA[<p>Beispiel ohne Templates mit strikter Trennung des Moduls in .h und .cpp -Datei:</p>
<pre><code class="language-cpp">// myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H

class MyClass {
private:
    int m_i;
public:
    MyClass();
    ~MyClass();

    void do_stuff(); // nicht inline, lohnt nich
    int get_count() const // inline sinnvoll
    {
        return m_i;
     }
};

#endif // !MYCLASS_H
</code></pre>
<pre><code class="language-cpp">// myclass.cpp

MyClass::MyClass()
 : m_int(0)
{}

MyClass::~MyClass()
{}

void MyClass::do_stuff()
{
    // manch was
    m_i++;
    // mach noch mehr

    // hier würde zu viel stehen, als dass sich inline lohnen würde
}
</code></pre>
<p>nun zur *.tcc, das gehört auch eigentlich nicht standardäßig zu C++ (soweit ich weiß), aber bspw. die STL-Implementation vom gcc (libstdc++) macht es so:</p>
<pre><code class="language-cpp">// mycontainer.h
#ifndef MYCONTAINER_H
#define MYCONTAINER_H

template&lt;class T&gt;
class MyContainer
{
private:
    T* m_ptr;
public:
    MyContainer(size_t size);
    ~MyContainer();
};

// hier wird includiert
#include &quot;mycontainer.tcc&quot;

#endif // !MYCONTAINER_H
</code></pre>
<pre><code class="language-cpp">// mycontainer.tcc

template&lt;class T&gt;
MyContainer::MyContainer(size_t size)
{
    m_ptr = new T[size];
}

template&lt;class T&gt;
MyContainer::~MyContainer()
{
    delete m_ptr;
}
</code></pre>
<p>.tcc kannst du dir als &quot;template c++ (implementation) file&quot; übersetzen, die für templates die Implementation in der Header-Datei stehen muss, du sie aber trotzdem in eine extra Datei (die aber nicht dem Kompiler mitgeteilt wird!) auslagerst.</p>
<p>natürlich könnte man den Ctor und Dtor beide inline direkt in die .h Datei schreiben. Könnte meistens sogar übersichtlicher sein. Ich denke, es kommt hier hauptsächlich auf den eigenen Geschmack an, weniger auf die Projektgröße. Höchstens noch die Klassengröße.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531695</guid><dc:creator><![CDATA[Xantus]]></dc:creator><pubDate>Wed, 18 Jun 2008 15:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Wed, 18 Jun 2008 15:46:41 GMT]]></title><description><![CDATA[<p>Aber wenn man im obieren Beispiel myclass.h in main.cpp inkludiert wird das doch<br />
nicht mit myclass.cpp in Verbindung gebracht. Man muss doch irgendwo die myclass.cpp<br />
inkludieren, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531702</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Wed, 18 Jun 2008 15:46:41 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Wed, 18 Jun 2008 16:56:37 GMT]]></title><description><![CDATA[<p>Hä?</p>
<p>Ein weiteres Trivialbeispiel mit dem von oben:</p>
<pre><code class="language-cpp">// myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H

#include &lt;string&gt;

class MyClass
{
private:
    // sichern, was zuletzt gesagt wurde
    std::string m_lastsaid; 
public:
    MyClass();
    ~MyClass();
    void say(const std::string&amp; s);

    std::string last_said() const // inline
    {
        return m_lastsaid;
    }
};

#endif // !MYCLASS_H
</code></pre>
<pre><code class="language-cpp">//myclass.cpp
#include &lt;iostream&gt;
#include &quot;myclass.h&quot;

MyClass::MyClass()
 : m_lastsaid(&quot;&lt;nothing&gt;&quot;) // initialisieren, keine ausgabe bisher
{}

MyClass::~MyClass()
{}

void MyClass::say(const std::string&amp; s)
{
    m_lastsaid = s;
    std::cout &lt;&lt; m_lastsaid &lt;&lt; std::endl;
}
</code></pre>
<pre><code class="language-cpp">// main.cpp
// benutzung
#include &lt;iostream&gt;
#include &quot;myclass.h&quot; // eine HEADER (.h) Datei

int main()
{
    MyClass a;

    a.say(&quot;hello&quot;); // hello auf dem bildschirm
    a.say(&quot;world&quot;); // world auf dem bildschirm
    // ... letzte ausgabe?
    std::cout &lt;&lt; a.last_said() &lt;&lt; std::endl; // ausgabe: world
    if(a.last_said() == &quot;hello&quot;) // false, weil letzte ausgabe world war
        std::cerr &lt;&lt; &quot;letzte ausgabe war nicht world&quot;; // wird nie erreicht
}
</code></pre>
<p>MyClass gibt also mit MyClass::say() einen Text aus, und speichert diese letzte Meldung im std::string m_lastsaid. Es gibt eine .h und eine .cpp für die klasse und eine .cpp für int main().</p>
<p>diese machst du jetzt so dem Compiler (bspw. g++ bekannt)</p>
<pre><code>g++ main.cpp myclass.cpp
</code></pre>
<p>Eine .cpp muss nirgends inkludiert werden <strong>(!)</strong>. Du machst sie entweder im Projekt deiner IDE, in deinem Makefile oder in der Kommandozeile deinem Compiler bekannt.</p>
<p>Am besten schaust du mal bei Google und der (englischen) Wikipedia nach Deklaration und Definition in der Programmierung, bzw. genauer bei C++ (und nebenbei noch C, schaden wirds nich). <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>Edit: schönheitsfehler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531714</guid><dc:creator><![CDATA[Xantus]]></dc:creator><pubDate>Wed, 18 Jun 2008 16:56:37 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Wed, 18 Jun 2008 16:03:41 GMT]]></title><description><![CDATA[<p>Also, du inkludierst im Hauptprogramm die Headerdatei. Die Funktionen an sich<br />
sind in der *.cpp und dort wird die Header auch inkludiert. Wie funktioniert<br />
denn das, dass man in der main.cpp dann auf die Funktionen zugreifen kann, wenn<br />
sie doch eigentlich nicht inkludiert werden? Oder wird die *.cpp immer zum<br />
Projekt hinzugefügt???</p>
<p>Und noch eine Schönheitsfrage:<br />
Zu der Klasse habe ich noch ein paar Konstanten und ein Enum. Soll ich das ganze<br />
in einen Namespace verpacken????</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531721</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Wed, 18 Jun 2008 16:03:41 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Wed, 18 Jun 2008 16:11:38 GMT]]></title><description><![CDATA[<p>Oh sry, hab deinen letzten Post nicht ganz durchgelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1531727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1531727</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Wed, 18 Jun 2008 16:11:38 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Klasse &#x2F; Dateien on Thu, 19 Jun 2008 12:40:41 GMT]]></title><description><![CDATA[<p>D schrieb:</p>
<blockquote>
<p>Und noch eine Schönheitsfrage:<br />
Zu der Klasse habe ich noch ein paar Konstanten und ein Enum. Soll ich das ganze<br />
in einen Namespace verpacken????</p>
</blockquote>
<p>Wenn die Klassen, Konstanten und Enums einen logischen Bezug zu einander haben, kannst du das gut in den gleichen Namespace packen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1532217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1532217</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 19 Jun 2008 12:40:41 GMT</pubDate></item></channel></rss>