<?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[Weltraumvernichtungssimulator]]></title><description><![CDATA[<p>Da ich in letzter Zeit wieder viel mit meinem Buch gearbeitet habe, wurd mir des zu langweilig und ich wollte mal wieder was programmieren. Ich wollte eine Textadventure (was anderes kann ich net^^) machen, namens &quot;weltraumvernichtungssimulator&quot;. Wie der Name schon sagt geht es darum den Weltraum zu vernichten. <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="😃"
    /><br />
So jetzt mal zum Code;</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

class game
{
    public:
    game();
    ~game();
    inline int get_end() const {return m_end;}
    inline void set_end() {m_end=false;}
    void story_part(string question,
                    string a, string b, string c,
                    string effect1, string effect2, string effect3);

    private:

    short m_save;
    bool m_end;
    inline bool check();

};

game::game()
:m_end(true)
{

}

game::~game()
{

}

//Rgelt die Ausgabe des Textes. 
/*
   question = Hier wird die Frage reingeschrieben 
   a = hier wird eine von 3 antwort möglichkeiten reingeschrieben
   b =  &quot;     &quot;    &quot;   &quot;  &quot;    &quot;          &quot;              &quot; 
   c =  &quot;     &quot;    &quot;   &quot;  &quot;    &quot;          &quot;              &quot;
   effect1 = wird nach der &quot;eingabe in cin&quot; auf den bildschirm geschrieben, wenn man 
             effect2 und effect3 als Parameter weg lässt. 
             Oder: wird bei der Wahl von antwort möglichkeit 1 auf den bildschirm geschrieben
   effect2 =        &quot;    &quot;   &quot;   &quot;    &quot;     &quot;         &quot;      2  &quot;   &quot;       &quot;          &quot;
   effect3 =        &quot;    &quot;   &quot;   &quot;    &quot;     &quot;         &quot;      3  &quot;   &quot;       &quot;          &quot; 

*/
void game::story_part(string question,
                      string a, string b, string c,
                      string effect1, string effect2=&quot;&quot;, string effect3=&quot;&quot;)
{
    cout &lt;&lt; question;
    cout &lt;&lt; a;
    cout &lt;&lt; b;
    cout &lt;&lt; c;
    cin &gt;&gt; m_save;
    if (check())
    {
        if ((effect2 == &quot;&quot;) and (effect3 == &quot;&quot;))
        {
            cout &lt;&lt; effect1;
        }
        if ((effect2 != &quot;&quot;) and (effect3 != &quot;&quot;))
        {
            switch(m_save)
            {
                case 1:
                cout &lt;&lt; effect1;
                break;
                case 2:
                cout &lt;&lt; effect2;
                break;
                case 3:
                cout &lt;&lt; effect3;
                break;
            }
        }
    }
    else
    {
        cout &lt;&lt; &quot;Du bist doch Deutschlands d&quot; &lt;&lt; &quot;\x81&quot; &lt;&lt; &quot;mmster! Ist es so schwierig ein Zahl zwischen \n&quot;;
        cout &lt;&lt; &quot;1 und 3 zu dr&quot; &lt;&lt; &quot;\x81&quot; &lt;&lt; &quot;cken?\n&quot;;
    }
}

//überprüft die elementvariable m_save ob ihr Inhalt eine Zahl zwischen 1 und 3 ist.
bool game::check()
{
    if (m_save&lt;1 or m_save&gt;3)
    {
        return false;
    }
    return true;
}

int main()
{
    game wus;
    do
    {
        wus.story_part(&quot;Wer wollen sie sein?\n&quot;,
                       &quot;1. Hitler\n&quot;,&quot;2. Ghandi\n&quot;,&quot;3. Georg W. Bush\n&quot;,
                       &quot;Sie sind nun Hitler.\n&quot;,
                       &quot;Sie sind nun Ghandi.\n&quot;,
                       &quot;Sie sind nun Georg W. Bush\n&quot;);
        wus.story_part(&quot;Wo wollen sie ihre Weltraumvernichtung beginnen?\n&quot;,
                       &quot;1. Erde\n&quot;,&quot;2. Mond\n&quot;,&quot;3. Internationale Raumstation (ISS)\n&quot;,
                       &quot;Okay\n&quot;);
    }while(wus.get_end());

	return 0;
}
</code></pre>
<p>1. Was kann ich alles am Code verbessern?<br />
2. Bei der Methode &quot;check()&quot; überprüfe ich ja schon mal ob der Nutzer eine falsche Zahl eingibt. Wie kann ich noch überprüfen oder er irgendwelche anderen Zeichen eingibt? [abc..*+~#...´´^^=}...]<br />
3. Ich weiß nicht wie ich das genau in meiner Hauptschleife regeln soll. Wenn jetzt z.B. eine Falsche Eingabe war, dann möchte ich das die jeweilige Funktion nochmal aufgerufen wird. Mit einer Schleife bin ich da sicher schon mal aufm richtigen Weg. Ich hab mir dann auch überlegt, ob ich vll. eine Elementvariable namens &quot;Regelung&quot; habe und das die nach jeder Frage immer hochgezählt wird, und so zur nächsten kommt. Also das dann da z.B. steht:</p>
<pre><code class="language-cpp">if (regelung==1)
{
   wus.storypart(...);
}
</code></pre>
<p>Und die check Methode macht dann halt immer:</p>
<pre><code class="language-cpp">++regelung
</code></pre>
<p>wenn bei der Frage alles gute gegangen ist, und halt niemand was falsch eingegeben hat.<br />
Mh ich glaub aber irgendwie das des n schlechter Stil ist, wenn ich das so mache. Wie würde ihr das machen?<br />
4. Hat jemand von euch schon mal so ein Textadventure geschrieben? Weiß jemand einen Öffentlichen Code zu sowas, das ich mir mal sowas anschauen könnte?<br />
5. Ich hab mir auch gedacht das es vll. besser wäre wenn der ganze Text in &quot;.txt&quot; Datein gespeichert wäre, und ich das dann ganz professionel reinlade und so, aber das ist mir leider viel zu schwierig, weil mir da noch das Wissen über Streams etc...fehlt!</p>
<p>MfG<br />
Stromberg</p>
<p>PS: Mh hab mir grad noch überlegt eigentlich könnte ich Klassen und des ganze Zeug in eine eigene &quot;.hpp&quot; reinstecken....mh mal schaun! Aber bei so wenig Code is es ja noch nicht so wichtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191495/weltraumvernichtungssimulator</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 07:59:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191495.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 Sep 2007 17:21:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Mon, 03 Sep 2007 17:21:50 GMT]]></title><description><![CDATA[<p>Da ich in letzter Zeit wieder viel mit meinem Buch gearbeitet habe, wurd mir des zu langweilig und ich wollte mal wieder was programmieren. Ich wollte eine Textadventure (was anderes kann ich net^^) machen, namens &quot;weltraumvernichtungssimulator&quot;. Wie der Name schon sagt geht es darum den Weltraum zu vernichten. <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="😃"
    /><br />
So jetzt mal zum Code;</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

class game
{
    public:
    game();
    ~game();
    inline int get_end() const {return m_end;}
    inline void set_end() {m_end=false;}
    void story_part(string question,
                    string a, string b, string c,
                    string effect1, string effect2, string effect3);

    private:

    short m_save;
    bool m_end;
    inline bool check();

};

game::game()
:m_end(true)
{

}

game::~game()
{

}

//Rgelt die Ausgabe des Textes. 
/*
   question = Hier wird die Frage reingeschrieben 
   a = hier wird eine von 3 antwort möglichkeiten reingeschrieben
   b =  &quot;     &quot;    &quot;   &quot;  &quot;    &quot;          &quot;              &quot; 
   c =  &quot;     &quot;    &quot;   &quot;  &quot;    &quot;          &quot;              &quot;
   effect1 = wird nach der &quot;eingabe in cin&quot; auf den bildschirm geschrieben, wenn man 
             effect2 und effect3 als Parameter weg lässt. 
             Oder: wird bei der Wahl von antwort möglichkeit 1 auf den bildschirm geschrieben
   effect2 =        &quot;    &quot;   &quot;   &quot;    &quot;     &quot;         &quot;      2  &quot;   &quot;       &quot;          &quot;
   effect3 =        &quot;    &quot;   &quot;   &quot;    &quot;     &quot;         &quot;      3  &quot;   &quot;       &quot;          &quot; 

*/
void game::story_part(string question,
                      string a, string b, string c,
                      string effect1, string effect2=&quot;&quot;, string effect3=&quot;&quot;)
{
    cout &lt;&lt; question;
    cout &lt;&lt; a;
    cout &lt;&lt; b;
    cout &lt;&lt; c;
    cin &gt;&gt; m_save;
    if (check())
    {
        if ((effect2 == &quot;&quot;) and (effect3 == &quot;&quot;))
        {
            cout &lt;&lt; effect1;
        }
        if ((effect2 != &quot;&quot;) and (effect3 != &quot;&quot;))
        {
            switch(m_save)
            {
                case 1:
                cout &lt;&lt; effect1;
                break;
                case 2:
                cout &lt;&lt; effect2;
                break;
                case 3:
                cout &lt;&lt; effect3;
                break;
            }
        }
    }
    else
    {
        cout &lt;&lt; &quot;Du bist doch Deutschlands d&quot; &lt;&lt; &quot;\x81&quot; &lt;&lt; &quot;mmster! Ist es so schwierig ein Zahl zwischen \n&quot;;
        cout &lt;&lt; &quot;1 und 3 zu dr&quot; &lt;&lt; &quot;\x81&quot; &lt;&lt; &quot;cken?\n&quot;;
    }
}

//überprüft die elementvariable m_save ob ihr Inhalt eine Zahl zwischen 1 und 3 ist.
bool game::check()
{
    if (m_save&lt;1 or m_save&gt;3)
    {
        return false;
    }
    return true;
}

int main()
{
    game wus;
    do
    {
        wus.story_part(&quot;Wer wollen sie sein?\n&quot;,
                       &quot;1. Hitler\n&quot;,&quot;2. Ghandi\n&quot;,&quot;3. Georg W. Bush\n&quot;,
                       &quot;Sie sind nun Hitler.\n&quot;,
                       &quot;Sie sind nun Ghandi.\n&quot;,
                       &quot;Sie sind nun Georg W. Bush\n&quot;);
        wus.story_part(&quot;Wo wollen sie ihre Weltraumvernichtung beginnen?\n&quot;,
                       &quot;1. Erde\n&quot;,&quot;2. Mond\n&quot;,&quot;3. Internationale Raumstation (ISS)\n&quot;,
                       &quot;Okay\n&quot;);
    }while(wus.get_end());

	return 0;
}
</code></pre>
<p>1. Was kann ich alles am Code verbessern?<br />
2. Bei der Methode &quot;check()&quot; überprüfe ich ja schon mal ob der Nutzer eine falsche Zahl eingibt. Wie kann ich noch überprüfen oder er irgendwelche anderen Zeichen eingibt? [abc..*+~#...´´^^=}...]<br />
3. Ich weiß nicht wie ich das genau in meiner Hauptschleife regeln soll. Wenn jetzt z.B. eine Falsche Eingabe war, dann möchte ich das die jeweilige Funktion nochmal aufgerufen wird. Mit einer Schleife bin ich da sicher schon mal aufm richtigen Weg. Ich hab mir dann auch überlegt, ob ich vll. eine Elementvariable namens &quot;Regelung&quot; habe und das die nach jeder Frage immer hochgezählt wird, und so zur nächsten kommt. Also das dann da z.B. steht:</p>
<pre><code class="language-cpp">if (regelung==1)
{
   wus.storypart(...);
}
</code></pre>
<p>Und die check Methode macht dann halt immer:</p>
<pre><code class="language-cpp">++regelung
</code></pre>
<p>wenn bei der Frage alles gute gegangen ist, und halt niemand was falsch eingegeben hat.<br />
Mh ich glaub aber irgendwie das des n schlechter Stil ist, wenn ich das so mache. Wie würde ihr das machen?<br />
4. Hat jemand von euch schon mal so ein Textadventure geschrieben? Weiß jemand einen Öffentlichen Code zu sowas, das ich mir mal sowas anschauen könnte?<br />
5. Ich hab mir auch gedacht das es vll. besser wäre wenn der ganze Text in &quot;.txt&quot; Datein gespeichert wäre, und ich das dann ganz professionel reinlade und so, aber das ist mir leider viel zu schwierig, weil mir da noch das Wissen über Streams etc...fehlt!</p>
<p>MfG<br />
Stromberg</p>
<p>PS: Mh hab mir grad noch überlegt eigentlich könnte ich Klassen und des ganze Zeug in eine eigene &quot;.hpp&quot; reinstecken....mh mal schaun! Aber bei so wenig Code is es ja noch nicht so wichtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358161</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Mon, 03 Sep 2007 17:21:50 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Mon, 03 Sep 2007 18:36:51 GMT]]></title><description><![CDATA[<p>pff ^^ wenne Langeweile hast:</p>
<pre><code class="language-cpp">struct part
{
	std::string		question;
	std::string		answer[3];
	std::string		effect[3];
	part(const std::string&amp; question, const std::string answer_a, 
		const std::string&amp; answer_b, const std::string&amp; answer_c, 
		const std::string&amp; effect_one, const std::string&amp; effect_two, 
		const std::string&amp; effect_three) : question(question)
	{
		answer[0] = answer_a;	answer[1] = answer_b;	answer[2] = answer_c;
		effect[0] = effect_one; effect[1] = effect_two; effect[2] = effect_three;
	}
	friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp;, const part&amp;);
};

std::ostream&amp; operator&lt;&lt; (std::ostream&amp; out, const part&amp; data)
{ 
	out &lt;&lt; data.question &lt;&lt; &quot;\n&quot;; for (std::size_t i = 0; i &lt; 3; ++i) out &lt;&lt; data.answer[i] &lt;&lt; &quot;\n&quot;;
	return out;
}

class story
{
public:
	story();

public:
	void add_part(const part&amp; data) { m_parts.push_back(data); }
	void show_part(std::ostream&amp; out, std::size_t i) { out &lt;&lt; m_parts.at(i) &lt;&lt; std::endl;

private:
	std::vector&lt;part&gt;	m_parts;
};
</code></pre>
<p>... wäre doch was <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/1358233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358233</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 03 Sep 2007 18:36:51 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Mon, 03 Sep 2007 19:05:31 GMT]]></title><description><![CDATA[<p>Ah, das is ja clever gemacht. Das genialste is ja wohl das mit dem &quot;struct part&quot; und das dann dem vector übergeben. Mhhh jetzt wenn ichs mir anschaue check ich alles. Aber warum hab ich nie solche einfälle, warum mach ich irgendwelche sau komplizierten umständliche entwürfe? Oh man!Erst ma Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358262</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Mon, 03 Sep 2007 19:05:31 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Mon, 03 Sep 2007 19:08:17 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Wie der Name schon sagt geht es darum den Weltraum zu vernichten. <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><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="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>Mh ich glaub aber irgendwie das des n schlechter Stil ist, wenn ich das so mache. Wie würde ihr das machen?</p>
</blockquote>
<p>Hab sowas noch nie gemacht, aber ich glaube ich würde es so tun:<br />
Eine Klasse schreiben für ein &quot;Event&quot;, also ein Ereignis, das eintreten kann. Die Klasse verwaltet die Frage die Antwortmöglichkeiten und wo man danach hinkommt.<br />
So ungefähr:</p>
<pre><code class="language-cpp">// Verwaltet alle Sachen die passieren, wenn eine Frage ausgewählt wurde
class AnswerObject
{
    public:
        string getAnswerString() const;

        // Wird aufgerufen, wenn diese Antwort ausgewählt wurde
        void OnCalled()
        {
            // Evtl irgendwas machen
            neue_frage.OnCalled();
        }

    private:
        string              answer;
        MirFälltKeinNameEin neue_frage;
};

class MirFälltKeinNameEin
{
    public:
        void OnCalled()
        {
            cout &lt;&lt; question &lt;&lt; endl;
            for ( size_t i=0; i&lt;answers.size(); i++ )
                cout &lt;&lt; i+1 &lt;&lt; &quot;: &quot; &lt;&lt; answers[i].getAnswerString() &lt;&lt; endl;
            unsigned int sel;   // &lt;- Kurzform für &quot;Selection&quot; :)
            cin &gt;&gt; sel;
            if ( sel &lt; answers.size() )
                answers.OnCalled();
        }

    private:
        string               question;    // beinhaltet die Frage
        vector&lt;AnswerObject&gt; answers;     // beinhaltet die Antworten
};
</code></pre>
<p>Ok, ziemlich schlecht geworden, aber ungefähr so in der Richtung würde ich's machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358266</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 03 Sep 2007 19:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Mon, 03 Sep 2007 20:09:07 GMT]]></title><description><![CDATA[<p>@(D)Evil<br />
Mh, also was struct ist weiß ich eigentlich schon, aber vll. hab ich nur immer Tutorials gemacht die &quot;struct&quot; nur ganz kurz beschrieben haben gelesen.</p>
<pre><code class="language-cpp">...
part(const std::string&amp; question, const std::string answer_a, 
        const std::string&amp; answer_b, const std::string&amp; answer_c, 
        const std::string&amp; effect_one, const std::string&amp; effect_two, 
        const std::string&amp; effect_three) : question(question) 
    { 
        answer[0] = answer_a;    answer[1] = answer_b;    answer[2] = answer_c; 
        effect[0] = effect_one; effect[1] = effect_two; effect[2] = effect_three; 
    }
...
</code></pre>
<p>Struct ist doch sowas wie eine Klasse nur das alles public ist oder?<br />
Was soll den das &quot;: question(question)&quot;. Und du hast dem vector ja dann &quot;part&quot; als Datentyp gegeben, aber in &quot;struct part&quot; gibts ja wieder eine Funktion namens part, mhh ich versteh des jetzt ent so ganz, ich kann doch über den vector keine Funktion dann mal aufrufen, oder geht des? Wird die Funktion part überhaupt irgendwo aufgerufen?<br />
Und kannst du mir erklären warum genau du den Operator &lt;&lt; überladen hast?<br />
Erklär mir doch bitte deinen Code <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="😃"
    /><br />
Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358319</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Mon, 03 Sep 2007 20:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Mon, 03 Sep 2007 20:16:25 GMT]]></title><description><![CDATA[<p>Das ist der Konstruktor.<br />
Und ja structs sind wie Klassen nur default public.<br />
Und da es Klassen sind können sie eben auhc Funktionen und<br />
Kon bzw. Destruktoren enthalten.</p>
<p>Das &quot;: question(question)&quot; nennt man Initalisierungsliste.<br />
Dort kannst du die member deiner Klasse mit Werten initalisieren<br />
(im Konstruktor selbst kannst du ihnen nur Werte zuweisen, was nicht dasselbe ist)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358321</guid><dc:creator><![CDATA[Mario Sandler]]></dc:creator><pubDate>Mon, 03 Sep 2007 20:16:25 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Mon, 03 Sep 2007 20:20:58 GMT]]></title><description><![CDATA[<p>Aso...ich kann des fast wie eine echt Klasse ansehen...also auch mit Konstruktor und so. Aha. Kann ich eigentlich auch Klassen als Typ von nem vector angeben? Und was würde jetzt passieren wenn es in struct noch eine methode gäb? Was könnte ich in einem vector damit anfangen? Würde das überhaupt gehen?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358325</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Mon, 03 Sep 2007 20:20:58 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Mon, 03 Sep 2007 20:33:53 GMT]]></title><description><![CDATA[<p>Na klar würde das gehn, solange es sinnvoll ist.<br />
Kleines Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

class Auto {

        public:
        //Hier der Konstruktor mit Initalisierungsliste
        Auto(string typ=&quot;Noname&quot;) : typ(typ) {
                cout &lt;&lt;  typ &lt;&lt; &quot; ist bereit zum fahren&quot; &lt;&lt; endl;
        }

        //Der Destruktor
        ~Auto() {
                cout &lt;&lt; typ &lt;&lt; &quot; wurde verschrottet&quot; &lt;&lt; endl;
        }

        //Und noch eine Methode
        void Fahren() {
                cout &lt;&lt; typ &lt;&lt;&quot; fährt&quot; &lt;&lt; endl;
        }

        private:
        //Und hier ein Member
        string typ;

};

int main() {

        //Der vector stellt jetzt eine Art Garage für
        //unsere Klasse Auto dar. In ihm können wir Auto &quot;parken&quot;
        vector&lt;Auto&gt; Garage;

        //Nun parken wir in unserer Garage einige Autos
        Garage.push_back(Auto(&quot;BMW&quot;));
        Garage.push_back(Auto(&quot;Mercedes&quot;));
        Garage.push_back(Auto(&quot;Opel&quot;));

        //Wieviele Autos hab ich jetzt in meiner Garage?
        int size = Garage.size();

        //Die will ich alle fahren
        for(int i = 0; i &lt; size; i++)
                Garage[i].Fahren();

        return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1358335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358335</guid><dc:creator><![CDATA[Mario Sandler]]></dc:creator><pubDate>Mon, 03 Sep 2007 20:33:53 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 00:07:50 GMT]]></title><description><![CDATA[<p>So hab mal nen neuen Code geschrieb, mit den Impressionen von euch:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
using namespace std;

struct part
{
    string m_question, m_a, m_b, m_c, m_effect1, m_effect2, m_effect3;
    part(const string question_,const string a_,const string b_,const string c_,const string effect1_,
    const string effect2_,const string effect3_);

};

part::part(const string question_,const string a_,const string b_,const string c_,const string effect1_,
           const string effect2_=&quot;&quot;,const string effect3_=&quot;&quot;)
{
    m_question=question_;
    m_a=a_;
    m_b=b_;
    m_c=c_;
    m_effect1=effect1_;
    m_effect2=effect2_;
    m_effect3=effect3_;
}

class game
{
    public:
    game();
    ~game();
    inline void new_story(const part&amp; data) {m_story.push_back(data);}
    void set_story(size_t index);
    inline bool check() const;
    inline bool get_end() const {return m_end;}

    private:
    vector&lt;part&gt; m_story;
    short m_save;
    bool m_end;

};

game::game()
{

}

game::~game()
{

}

void game::set_story(size_t index)
{
    cout &lt;&lt; m_story[index].m_question;
    cout &lt;&lt; m_story[index].m_a;
    cout &lt;&lt; m_story[index].m_b;
    cout &lt;&lt; m_story[index].m_c;
    cin &gt;&gt; m_save;
    if (check())
    {
        if (m_story[index].m_effect2==&quot;&quot; and m_story[index].m_effect3==&quot;&quot;)
        {
            cout &lt;&lt; m_story[index].m_effect1;
        }
        else
        {
            switch(m_save)
            {
                case 1:
                cout &lt;&lt; m_story[index].m_effect1;
                break;
                case 2:
                cout &lt;&lt; m_story[index].m_effect2;
                break;
                case 3:
                cout &lt;&lt; m_story[index].m_effect3;
                break;
            }
        }
    }
}

bool game::check() const
{
    if (m_save&lt;1 or m_save&gt;3)
    {
        cout &lt;&lt; &quot;Du bist doch Deutschlands d&quot; &lt;&lt; &quot;\x81&quot; &lt;&lt; &quot;mmster! Ist es so schwierig ein Zahl zwischen \n&quot;;
        cout &lt;&lt; &quot;1 und 3 zu dr&quot; &lt;&lt; &quot;\x81&quot; &lt;&lt; &quot;cken?\n&quot;;
        return false;
    }
    return true;
}

int main()
{
    game wus;
    wus.new_story(&quot;Wer wollen sie sein?\n&quot;,
                  &quot;1. Hitler\n&quot;,&quot;2. Gahndi\n&quot;,&quot;3. Georg W. Bush\n&quot;,
                  &quot;Sie sind nun Hitler!\n&quot;, &quot;Sie sind nun Gahndi!\n&quot;, &quot;Sie sind nun Georg W. Bush!\n&quot;);

    return 0;
}
</code></pre>
<p>nur kommt immer folgender Fehler:</p>
<blockquote>
<p>-------------- Build: Debug in GAME ---------------<br />
Compiling: main.cpp<br />
main.cpp: In function <code>int main()': main.cpp:102: error: no matching function for call to</code>game::new_story(const char[22], const char[11], const char[11], const char[18], const char[22], const char[22], const char[29])'<br />
main.cpp:32: note: candidates are: void game::new_story(const part&amp;)<br />
Process terminated with status 1 (0 minutes, 0 seconds)<br />
2 errors, 0 warnings</p>
</blockquote>
<p>Was ist falsch? Ich schaffs irgendwie nicht mehr, es ist schon zu spät für mich. Wer noch wach genug ist der solls mir doch bitte sagen. <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>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358387</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Tue, 04 Sep 2007 00:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 00:27:41 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">wus.new_story( part( &quot;Wer wollen sie sein?\n&quot;,
                  &quot;1. Hitler\n&quot;,&quot;2. Gahndi\n&quot;,&quot;3. Georg W. Bush\n&quot;,
                  &quot;Sie sind nun Hitler!\n&quot;, &quot;Sie sind nun Gahndi!\n&quot;, &quot;Sie sind nun Georg W. Bush!\n&quot;) );
</code></pre>
<p>Das &quot;part( &quot; ist neu (und hinten die entsprechende schließende Klammer) <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/1358389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358389</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 04 Sep 2007 00:27:41 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 03:03:00 GMT]]></title><description><![CDATA[<p>wenn das ein adventure gibt, hast ja immerhin 0,01 % vom Code geschaft;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358405</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 04 Sep 2007 03:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 12:35:35 GMT]]></title><description><![CDATA[<p>Aber du solltest auch nen streamoperator für deine struct &quot;part&quot; anlegen. Dann Initialisierungsliste nutzen, check einfach rausnehmen ... die ist nicht schön ... die komische m_end-Variable rausnehmen ... Default-Konstruktor lassen ...<br />
=&gt;</p>
<pre><code class="language-cpp">class game
{
public:
	struct part
	{
		std::string        question;
		std::string        answer[3];
		std::string        effect[3];
		part(const std::string&amp; question, const std::string answer_a,
			const std::string&amp; answer_b, const std::string&amp; answer_c,
			const std::string&amp; effect_one, const std::string&amp; effect_two,
			const std::string&amp; effect_three) : question(question)
		{
			answer[0] = answer_a;    answer[1] = answer_b;    answer[2] = answer_c;
			effect[0] = effect_one; effect[1] = effect_two; effect[2] = effect_three;
		}
		friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp;, const game::part&amp;);
	};

public:
	void		new_story(const part&amp; data)		{	m_story.push_back(data);	}
	void		show_story(std::size_t) const;

private:
	std::vector&lt;part&gt; m_story;
};

std::ostream&amp; operator&lt;&lt; (std::ostream&amp; out, const game::part&amp; data)
{
    out &lt;&lt; data.question &lt;&lt; &quot;\n&quot;; for (std::size_t i = 0; i &lt; 3; ++i) out &lt;&lt; data.answer[i] &lt;&lt; &quot;\n&quot;;
    return out;
}

void game::show_story(std::size_t index) const
{
	std::cout &lt;&lt; m_story.at(index) &lt;&lt; std::endl;
	unsigned short answer = 0;
	while (!(std::cin &gt;&gt; answer) || answer &lt; 1 || answer &gt; 3) { std::cin.clear(); std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), '\n'); }

	if (m_story.at(index).effect[1].empty() == true &amp;&amp; m_story.at(index).effect[2].empty() == true)
	{
		std::cout &lt;&lt; m_story.at(index).effect[0] &lt;&lt; std::endl;
		return;
	}

	std::cout &lt;&lt; m_story.at(index).effect[answer - 1] &lt;&lt; std::endl;
}

int main()
{
	game new_game;
	new_game.new_story(game::part(	&quot;Wer wollen sie sein?&quot;, 
									&quot;1. Hitler&quot;, &quot;2. Gahndi&quot;, &quot;3. Georg W. Bush&quot;,
									&quot;Sie sind nun Hitler!&quot;, &quot;Sie sind nun Gahndi!&quot;, &quot;Sie sind nun Georg W. Bush!&quot;));

	new_game.show_story(0);
}
</code></pre>
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1358743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358743</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 04 Sep 2007 12:35:35 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 15:06:27 GMT]]></title><description><![CDATA[<p>Ich würde gern noch einige Teile von (D)Evil's Code übernehmen, aber zum Beispiel bei dem Teil mit dem überladen von &quot;&lt;&lt;&quot; blick ich nicht durch. Also muss ich erst bisschen üben bis ich mich mit dem operator &quot;&lt;&lt;&quot; auskenne....sonst is ja sinnlos wenn ich nur abschreibe.<br />
Also hab ich bissel in so nem Tutorial &quot;rumgestöbert&quot;. Aber ich kenn mich imemr noch nicht richtig aus.<br />
Wollte folgendes schreiben:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

ostream&amp; operator&lt;&lt;(ostream &amp;out, string a);

int main()
{
    string l=&quot;Hans&quot;;
    string m=&quot;Werner&quot;;
    string n=&quot;Uschi&quot;;
    cout &lt;&lt; l &lt;&lt; m &lt;&lt; n;

    return 0;
}

ostream&amp; operator&lt;&lt;(ostream &amp;out, string a)
{
    cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    return out;
}
</code></pre>
<p>Ich wollte das so konstruieren, das wenn man die 3 String aneinandereit, das dann automatisch ein Leerzeichen eingfügt wird.<br />
So ich hab aus dem Tutorial gelernt das cout so funktioniert:<br />
cout &lt;&lt; a &lt;&lt; b &lt;&lt; &quot;\n&quot; &lt;&lt; &quot;Blub&quot;;<br />
((((cout &lt;&lt; a) &lt;&lt; b) &lt;&lt; &quot;\n&quot; ) &lt;&lt; &quot;Blub&quot;)<br />
Deshalb muss man unbedingt wieder das selbe cout Objekt vom anfang zurückgeben, sonst wär da nichts mehr weil der Befehl halt einfach ausgeführt worden wäre, und &quot;rhs&quot; könnte mit &quot;lhs&quot; nichts mehr anfangen. Und das wär so verpufft!!! Weg halt, oder kp was dann passiert. Stimmts bis jetzt?<br />
Und dann hab ich mir halt einfach gedacht schreib ich den &quot;string a&quot; hin, + &quot; das leerzeichen. Und gebe wieder das &quot;Ur&quot; cout Objekt zurück.<br />
Mh des funzt bei mir aber net, bzw. es gibt keine Ausgabe, die Ausgabe ist gleich NULL :D!</p>
<blockquote></blockquote>
<p>Nichts halt einfach. So was nun tun?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358881</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Tue, 04 Sep 2007 15:06:27 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 15:16:10 GMT]]></title><description><![CDATA[<p>ehm weiß nicht ob er deinen operator nimmt aber:</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, const std::string&amp;);

int main()
{
    std::string l(&quot;Hans&quot;);
    std::string m(&quot;Werner&quot;);
    std::string n(&quot;Uschi&quot;);
    std::cout &lt;&lt; l &lt;&lt; m &lt;&lt; n;

    return 0;
}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const std::string&amp; str)
{
    out &lt;&lt; str &lt;&lt; &quot; &quot;;
    return out;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1358891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358891</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 04 Sep 2007 15:16:10 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 15:23:29 GMT]]></title><description><![CDATA[<p>@(D)Evil: Dein Programm resultiert bei mir (MinGW) in &quot;Process terminated with status -1073741819&quot;. Wenn man das ganze mit einer eigenen Klasse macht scheint das irgendwie besser zu gehen. Folgendes funktioniert bei mir:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

class MyString
{
    friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp; out, const MyString&amp; obj);
//  ^^^^^^ damit wir Zugriff auf private member haben
    public:
        MyString(const std::string&amp; s) : data(s) {}
    private:
        std::string data;
};

std::ostream&amp; operator&lt;&lt; (std::ostream&amp; out, const MyString&amp; obj)
{
    out &lt;&lt; obj.data &lt;&lt; &quot; &quot;;
//  ^^^
    return out;
}

int main()
{
    MyString a(&quot;Hans&quot;);
    MyString b(&quot;Werner&quot;);
    MyString c(&quot;Uschi&quot;);
    std::cout &lt;&lt; a &lt;&lt; b &lt;&lt; c &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1358899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358899</guid><dc:creator><![CDATA[OhneName]]></dc:creator><pubDate>Tue, 04 Sep 2007 15:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 15:33:25 GMT]]></title><description><![CDATA[<p>hmm ... ist ja auch logisch <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="😃"
    /> Das verursacht eine Endlosschleife <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="😉"
    /> Im Code wird ja der streamoperator wieder von sich selbst aufgerufen!</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const std::string&amp; str)
{
    out &lt;&lt; str.c_str() &lt;&lt; &quot; &quot;;
    return out;
}
</code></pre>
<p>würde es unter umständen tun <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/1358904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358904</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 04 Sep 2007 15:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 15:37:04 GMT]]></title><description><![CDATA[<p>Ah also was ich erst ma gelernt habe, is klar man leitet alles in das Objekt &quot;out&quot; rein und gibt dieses dann zurück. Ich hab da ja vorhin was mit cout gemacht....--&gt; unsinn.<br />
Wie &quot;ohnename&quot; schon gesagt hat, funktionierts bei mir auch nicht. (hab auch MinGW). Hmm...warum geht das ganze dann nur wenn mans in eine Klasse schreibt?<br />
Mir fällt langsam auf, das ihr alle bei den Parametern (fast) IMMER Referenzen<br />
nutzt. Ich hab gedacht sowas macht man nur bei Objekten, bzw. wenn man Variablen übergibt und nicht wenn man was mit Hand reinschreibt. Aber okay, auch wenn man anscheinend was mit Handreinschreibt, wird mit diesem dann eine Variable\Objekt.. erzeugt....und somit wieder --&gt; Kopie --&gt; Zeitaufwand.<br />
Zumindestens nehm ich in Zukunft als Parameter dann halt auch immer Referenzen.</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358907</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Tue, 04 Sep 2007 15:37:04 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 15:48:18 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>ehm weiß nicht ob er deinen operator nimmt aber:</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, const std::string&amp;);

int main()
{
    std::string l(&quot;Hans&quot;);
    std::string m(&quot;Werner&quot;);
    std::string n(&quot;Uschi&quot;);
    std::cout &lt;&lt; l &lt;&lt; m &lt;&lt; n;

    return 0;
}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const std::string&amp; str)
{
    out &lt;&lt; str &lt;&lt; &quot; &quot;;
    return out;
}
</code></pre>
</blockquote>
<p>Ich hab mal versucht das nachzuvollziehen...</p>
<p>Baust du dir hier nicht eine Endlosrekursion? Du rufst dich ja mit deinem Operator immer wieder selber auf... <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>
<p>Bei mir funktioniert er so....</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, const std::string&amp;);

int main()
{
    std::string l(&quot;Hans&quot;);
    std::string m(&quot;Werner&quot;);
    std::string n(&quot;Uschi&quot;);
    std::cout &lt;&lt; l &lt;&lt; m &lt;&lt; n;

    return 0;
}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const std::string&amp; str)
{
    for(int i = 0; i &lt; str.length(); i++)
        out.put(str[i]);

    out.put(' ');

    return out;
}
</code></pre>
<p>[Edit:]<br />
Ups, zu spät...<br />
Gruß<br />
zeigerzeiger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358911</guid><dc:creator><![CDATA[zeigerzeiger]]></dc:creator><pubDate>Tue, 04 Sep 2007 15:48:18 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 16:02:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, const std::string&amp;);
</code></pre>
<p>Das ist ganz schön brutal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358925</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 04 Sep 2007 16:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 16:10:15 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Ich wollte eine Textadventure (was anderes kann ich net^^) machen, namens &quot;weltraumvernichtungssimulator&quot;. Wie der Name schon sagt geht es darum den Weltraum zu vernichten. <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>Nette Idee. Klingt wie eine Space Quest Episode. <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/1358928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358928</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 04 Sep 2007 16:10:15 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 18:17:27 GMT]]></title><description><![CDATA[<p>Wenn es zu einer endloschlefie führt, warum führt das denn dann eigentlich nicht zu einer, ist doch so n ähnliches System: [ausm anfangs Code der von (D)Evil gepostet wurde]</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt; (std::ostream&amp; out, const game::part&amp; data) 
{ 
    out &lt;&lt; data.question &lt;&lt; &quot;\n&quot;; for (std::size_t i = 0; i &lt; 3; ++i) out &lt;&lt; data.answer[i] &lt;&lt; &quot;\n&quot;; 
    return out; 
}
</code></pre>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const std::string&amp; str)
{
    out &lt;&lt; str.c_str() &lt;&lt; &quot; &quot;;
    return out;
}
</code></pre>
<p>Ah okay, ich glaub das verstehe ich, du hast halt keinen &quot;string&quot; mehr nach dem Operator &quot;&lt;&lt;&quot;:</p>
<pre><code class="language-cpp">out &lt;&lt; str.c_str() &lt;&lt; &quot; &quot;;
</code></pre>
<p>sondern machst mit &quot;str.c_str()&quot; einen C-String draus, sodass der überladene Operator &quot;&lt;&lt;&quot; nicht mehr drauf anschlägt. Als was wird den eigentlich &quot; &quot; angesehen, als C-String, also char? Und was wäre wenn das noch &quot;BLABLA&quot; stände, würde das dann auch als char angesehen, oder wärs n string...? Weil wenns n string wäre, dann würde der Operator &quot;&lt;&lt;&quot; ja wieder anschlagen. Hab ich das richtig verstanden?</p>
<p>Wies &quot;zeigerzeiger&quot; gemacht hat, hab ich glaub auch ungefähr verstanden, und zwar:</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const std::string&amp; str)
{
    for(int i = 0; i &lt; str.length(); i++)
        out.put(str[i]);

    out.put(' ');

    return out;
}
</code></pre>
<p>Du hast eine for Schleife vom Buchstaben anfang bis zum Buchstaben Ende vom string &quot;str&quot; runtergezählt, in dieser stopftst du die einzelnen Buchstaben in &quot;out&quot; mit &quot;put&quot; rein? Woher kommt &quot;put&quot; hab ich noch nie gehört davon.... <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="😕"
    />? Ist &quot;put&quot; sowas wie &quot;&lt;&lt;&quot;? Dann müsst ich glaub auch deine Funktion verstanden haben. Welche von beiden ist den nun schneller?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a><br />
Warum ist das ganz schön burtal? Stimmts etwa doch nicht? Des hatt mich jetzt bissel verwirrt.</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358992</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Tue, 04 Sep 2007 18:17:27 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 19:00:21 GMT]]></title><description><![CDATA[<blockquote>
<p>Woher kommt &quot;put&quot; hab ich noch nie gehört davon.... <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="😕"
    />? Ist &quot;put&quot; sowas wie &quot;&lt;&lt;&quot;?</p>
</blockquote>
<p><a href="http://www.cplusplus.com/reference/iostream/ostream/put.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ostream/put.html</a> ... nein. std::ostream::put(char c) ist eine Funktion, std::ostream::operator&lt;&lt; ist ein Stream-Operator.</p>
<blockquote>
<p>warum führt das denn dann eigentlich nicht zu einer, ist doch so n ähnliches System</p>
</blockquote>
<p>Nope. Du überlädst da ja den operator&lt;&lt; für game::part und nicht für std::string. data.question ist aber ein std::string!</p>
<blockquote>
<p>Als was wird den eigentlich &quot; &quot; angesehen, als C-String, also char?</p>
</blockquote>
<p>er sollte es als const char* interpretieren: { ' ', '\0' } ...</p>
<blockquote>
<p>Und was wäre wenn das noch &quot;BLABLA&quot; stände</p>
</blockquote>
<p>{ 'B', 'L', 'A', 'B', 'L', 'A', '\0' } =&gt; const char* ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359023</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 04 Sep 2007 19:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 19:08:35 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a><br />
Warum ist das ganz schön burtal? Stimmts etwa doch nicht? Des hatt mich jetzt bissel verwirrt.</p>
</blockquote>
<p>Ist keine Frage von stimmen. Es verändert die Semantik einer bereits wohldefinierten Operation in nichttrivialer Weise. Das es überhaupt geht, ist nur dem Zufall geschuldet (hier: die normale Überladung für diesen Fall ist eine Templatefunktion).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359026</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 04 Sep 2007 19:08:35 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 20:52:28 GMT]]></title><description><![CDATA[<p>Also bist du eher der Meinung das des schlechter Stil ist oder wie? Aber eigentlich macht des doch nix, weil es hätte doch sowieso nen Compilierfehler gegeben wenn man einfach nach dem &quot;&lt;&lt;&quot; ein game::part objekt hingesetzt hätte oder? Ich versteh jetzt net so ganz.</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359060</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Tue, 04 Sep 2007 20:52:28 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 21:14:35 GMT]]></title><description><![CDATA[<p>Noch kurz was, wie kann ich mir den das jetzt genau vorstellen, wenn da jetzt steht:</p>
<pre><code class="language-cpp">.....
game::part objekt;
cout &lt;&lt; objekt;
.....
std::ostream&amp; operator&lt;&lt; (std::ostream&amp; out, const game::part&amp; data) 
{ 
    out &lt;&lt; data.question &lt;&lt; &quot;\n&quot;; for (std::size_t i = 0; i &lt; 3; ++i) out &lt;&lt; data.answer[i] &lt;&lt; &quot;\n&quot;; 
    return out; 
}
</code></pre>
<p>was passiert dann jetzt genau bei &quot;cout &lt;&lt; objekt&quot; und bei &quot;return out&quot;, steht da dann zum schluss irgendwie dann des cout und das out?</p>
<pre><code class="language-cpp">cout &lt;&lt; out;
</code></pre>
<p>Kann ich mir das so im Kopf vorstellen?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359064</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Tue, 04 Sep 2007 21:14:35 GMT</pubDate></item><item><title><![CDATA[Reply to Weltraumvernichtungssimulator on Tue, 04 Sep 2007 21:38:02 GMT]]></title><description><![CDATA[<p>Du kannst dir</p>
<pre><code class="language-cpp">cout &lt;&lt; objekt
</code></pre>
<p>als</p>
<pre><code class="language-cpp">operator&lt;&lt;(cout, objekt)
</code></pre>
<p>vorstellen, dann sollte es dir eigentlich klar werden.</p>
<p>Das &quot;return out;&quot; erlaubt dir, Aufrufe des operator&lt;&lt; zu verketten:</p>
<pre><code class="language-cpp">cout &lt;&lt; objekt1 &lt;&lt; objekt2; // ist das gleiche wie:
operator&lt;&lt;(operator&lt;&lt;(cout, objekt1), objekt)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1359072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359072</guid><dc:creator><![CDATA[michba]]></dc:creator><pubDate>Tue, 04 Sep 2007 21:38:02 GMT</pubDate></item></channel></rss>