<?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[Objekte Speichern und wieder Herstellen]]></title><description><![CDATA[<p>Erstmal ein Hallo in die Runde,<br />
tolles Forum wo ich viele Infos bekomme.</p>
<p>Ich lerne gerade c++ ( Autodidakt mit Büchern ) und bin dabei mir eine kleine Videothek zu schreiben, um den Umgang mit Klassen zu erlernen, Konsole.</p>
<p>Hab eine Klasse Filme :</p>
<pre><code class="language-cpp">class filme
{
public:
	static enum sorten { SciFi=1, Horror=2, Komödie=3,Doku=4,Sport=5,Annime=6,Anderes=7 };
	static sorten enusor( int a );
	static std::string enusort( int a );
private:
	std::string titel;
	sorten genre;
	int mb;
	int wertung;
	std::string ort;
	std::string beschreibung;

public:
	filme(const std::string &amp; t,sorten g, int smb, int wert ,const std::string wo, const std::string &amp;besch);
	std::string getTitel() const;
	int getGenre() const;
	int getmb() const;
	int getNote() const;
	std::string getort() const;
	std::string getBeschreibung() const;
	void settitel(std::string &amp;tit);
	void setgenre(sorten &amp;gen);
	void setmb(int siz);
	void setwertung(int a);
	void setort(std::string &amp;a);
	void setbeschreibung(std::string &amp;a);
    void print();
</code></pre>
<p>Und eine Klasse in der ich die Filme verwalte:</p>
<pre><code class="language-cpp">class filmework
{
public:
	typedef std::vector&lt;filme&gt; filmliste; 

private:
	filmliste liste;
	filmliste suchestring(const std::string &amp;a,std::string (filme::*mptr)()const) const;
	filmliste findeint(int g,int (filme::*mptr)()const) const;

	static std::string initein(const std::string &amp;a, const std::string &amp;b,unsigned int c);
	static int initeinN(const std::string &amp;a, const std::string &amp;b, int c ,int d);
	static std::string eintit;
	static std::string maxzeichen50 ;
	static std::string genretext;
	static std::string generotext;
	static std::string sizetext;
	static std::string sizeerotext;
	static std::string notentext;
	static std::string notenerotext;
	static std::string orttext;
	static std::string maxzeichen100;
	static std::string beschtext;

public:

	filmework();
	void hinzufuegen(const filme &amp;f);
	static filme erstellefilm();
	filmliste suche();
	virtual ~filmework(void);
	filmliste sortiere();
</code></pre>
<p>Jetzt versuche ich Methoden für das Lesen und Speichern einzubringen,<br />
allerdins das einfache Überladen der Shift Operatoren bringt mich da nicht wirklich weiter.</p>
<p>Wenn ich das Beispiel aus dem Netz nehme:<br />
istream&amp; operator &gt;&gt; (istream&amp; is, Complex&amp; op)<br />
{<br />
is &gt;&gt; op.real; // Real- und Imaginär-<br />
is &gt;&gt; op.omag; // anteil einlesen<br />
return is; // Referenz auf Stream zurückliefern<br />
}</p>
<p>Wie kann ich hier einen Delimer angeben zwichen den Tokens des Objekts ?</p>
<p>Jetzt wird oft auf die Boost Serialisation verwiesen, allerdings möchte ich erst den &quot;Weg zu Fuß gehen &quot; um es zu verstehen.</p>
<p>Würde mich über Hilfe freuen.</p>
<p>Grüßle</p>
<p>MDMR</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/263473/objekte-speichern-und-wieder-herstellen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 17:03:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263473.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Mar 2010 14:23:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekte Speichern und wieder Herstellen on Sun, 21 Mar 2010 14:23:25 GMT]]></title><description><![CDATA[<p>Erstmal ein Hallo in die Runde,<br />
tolles Forum wo ich viele Infos bekomme.</p>
<p>Ich lerne gerade c++ ( Autodidakt mit Büchern ) und bin dabei mir eine kleine Videothek zu schreiben, um den Umgang mit Klassen zu erlernen, Konsole.</p>
<p>Hab eine Klasse Filme :</p>
<pre><code class="language-cpp">class filme
{
public:
	static enum sorten { SciFi=1, Horror=2, Komödie=3,Doku=4,Sport=5,Annime=6,Anderes=7 };
	static sorten enusor( int a );
	static std::string enusort( int a );
private:
	std::string titel;
	sorten genre;
	int mb;
	int wertung;
	std::string ort;
	std::string beschreibung;

public:
	filme(const std::string &amp; t,sorten g, int smb, int wert ,const std::string wo, const std::string &amp;besch);
	std::string getTitel() const;
	int getGenre() const;
	int getmb() const;
	int getNote() const;
	std::string getort() const;
	std::string getBeschreibung() const;
	void settitel(std::string &amp;tit);
	void setgenre(sorten &amp;gen);
	void setmb(int siz);
	void setwertung(int a);
	void setort(std::string &amp;a);
	void setbeschreibung(std::string &amp;a);
    void print();
</code></pre>
<p>Und eine Klasse in der ich die Filme verwalte:</p>
<pre><code class="language-cpp">class filmework
{
public:
	typedef std::vector&lt;filme&gt; filmliste; 

private:
	filmliste liste;
	filmliste suchestring(const std::string &amp;a,std::string (filme::*mptr)()const) const;
	filmliste findeint(int g,int (filme::*mptr)()const) const;

	static std::string initein(const std::string &amp;a, const std::string &amp;b,unsigned int c);
	static int initeinN(const std::string &amp;a, const std::string &amp;b, int c ,int d);
	static std::string eintit;
	static std::string maxzeichen50 ;
	static std::string genretext;
	static std::string generotext;
	static std::string sizetext;
	static std::string sizeerotext;
	static std::string notentext;
	static std::string notenerotext;
	static std::string orttext;
	static std::string maxzeichen100;
	static std::string beschtext;

public:

	filmework();
	void hinzufuegen(const filme &amp;f);
	static filme erstellefilm();
	filmliste suche();
	virtual ~filmework(void);
	filmliste sortiere();
</code></pre>
<p>Jetzt versuche ich Methoden für das Lesen und Speichern einzubringen,<br />
allerdins das einfache Überladen der Shift Operatoren bringt mich da nicht wirklich weiter.</p>
<p>Wenn ich das Beispiel aus dem Netz nehme:<br />
istream&amp; operator &gt;&gt; (istream&amp; is, Complex&amp; op)<br />
{<br />
is &gt;&gt; op.real; // Real- und Imaginär-<br />
is &gt;&gt; op.omag; // anteil einlesen<br />
return is; // Referenz auf Stream zurückliefern<br />
}</p>
<p>Wie kann ich hier einen Delimer angeben zwichen den Tokens des Objekts ?</p>
<p>Jetzt wird oft auf die Boost Serialisation verwiesen, allerdings möchte ich erst den &quot;Weg zu Fuß gehen &quot; um es zu verstehen.</p>
<p>Würde mich über Hilfe freuen.</p>
<p>Grüßle</p>
<p>MDMR</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1872048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1872048</guid><dc:creator><![CDATA[mdmr]]></dc:creator><pubDate>Sun, 21 Mar 2010 14:23:25 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte Speichern und wieder Herstellen on Mon, 22 Mar 2010 09:41:18 GMT]]></title><description><![CDATA[<p>Du kannst istreams genau so verwenden wie cin (da cin ein istream ist)<br />
Also könntest du einen Delimeter wie folgt einlesen:</p>
<pre><code class="language-cpp">istream&amp; operator &gt;&gt; (istream&amp; is, Complex&amp; op)
{
char delimeter;
is &gt;&gt; op.real; // Real- und Imaginär-

is &gt;&gt; delimeter; // liest einen char aus dem stream, z.b. '|'

is &gt;&gt; op.omag; // anteil einlesen
return is; // Referenz auf Stream zurückliefern
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1872375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1872375</guid><dc:creator><![CDATA[rean]]></dc:creator><pubDate>Mon, 22 Mar 2010 09:41:18 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte Speichern und wieder Herstellen on Mon, 22 Mar 2010 09:54:02 GMT]]></title><description><![CDATA[<p>Wenn du das unbedingt mit dem Shiftoperator lösen möchtest anstatt einfach eine Methode zu schreiben die deine Objekte speichert, musst du dir zu erst überlegen wohin dein Objekt denn geschiftet werden soll.<br />
Um dabei direkt einen Dateinamen angeben zu können, böte sich ein shiften nach einem String an, das sähe dann ungefähr so aus.</p>
<pre><code class="language-cpp">void operator&gt;&gt;(testklasse &amp;tk, std::string str)
{
	std::ofstream outfile(str.c_str());
	std::ostringstream os;
	os &lt;&lt; tk.str1 &lt;&lt; &quot;;&quot; &lt;&lt; tk.str2; // &lt;-- du gibst jedes Element durch dein Delimiter getrennt hier an;
	outfile &lt;&lt; os.str();

}
</code></pre>
<p>str1 und str2 sind hier zwei public strings von testklasse.</p>
<p>benutzen könnte man das dann so</p>
<pre><code class="language-cpp">testklasse tk1;
	tk1.str1 = &quot;hallo&quot;;
	tk1.str2 = &quot;welt&quot;;

	tk1 &gt;&gt; &quot;test.txt&quot;;
</code></pre>
<p>Dein Delimiter wählst du selbst, in meinem Beispiel das Semikolon.</p>
<p>EDIT:<br />
um mit deinen Klassen zu arbeiten solltest du dir zuvor jedoch anschauen wie man Operatoren für Klassen überlädt und nicht als globale Funktion, alternativ kannst du deine Operatorüberladung auch zum Freund deiner Klasse machen.</p>
<p>Eine einfachere Idee wäre jedoch einfach eine Methode zu schreiben die was speichert und lädt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1872382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1872382</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Mon, 22 Mar 2010 09:54:02 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte Speichern und wieder Herstellen on Mon, 22 Mar 2010 11:07:23 GMT]]></title><description><![CDATA[<p>Kahino schrieb:</p>
<blockquote>
<p>Wenn du das unbedingt mit dem Shiftoperator lösen möchtest anstatt einfach eine Methode zu schreiben die deine Objekte speichert, musst du dir zu erst überlegen wohin dein Objekt denn geschiftet werden soll.</p>
</blockquote>
<p>Quark. Gerade dem Shiftoperator sollte egal sein, wo er rein schreibt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1872417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1872417</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 22 Mar 2010 11:07:23 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte Speichern und wieder Herstellen on Mon, 22 Mar 2010 11:15:54 GMT]]></title><description><![CDATA[<p>Kahino schrieb:</p>
<blockquote>
<p>Eine einfachere Idee wäre jedoch einfach eine Methode zu schreiben die was speichert und lädt.</p>
</blockquote>
<p>.. interessante Aussage! <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>genau das haben MDMR und rean doch gemacht.<br />
Nur zur Info: Die Schnittstelle für einen Input d.h. das Einlesen von irgendwas ist in C++ ein std::istream (genauer std::basic_istream&lt;&gt;) und die Schnittstelle für einen Output also eine Ausgabe ist std::ostream (genauer std::basic_ostream&lt;&gt;). cin, ifstream sind istreams und cout, ofstream sind std::ostreams.</p>
<p>Folglich ist eine Funktion für das Einlesen eines Objekts einer Klasse eine Funktion mit std::istream&amp; und der betreffenden Klasse. Und üblich ist der operator&gt;&gt; (s. Posting von rean).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1872424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1872424</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Mon, 22 Mar 2010 11:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte Speichern und wieder Herstellen on Tue, 23 Mar 2010 14:32:36 GMT]]></title><description><![CDATA[<p>So danke für die Hilfe ,<br />
funktioniert jetzt.</p>
<pre><code class="language-cpp">std::ostream &amp;operator&lt;&lt;(std::ostream &amp;os, const filme &amp;val)
{
	os.clear();
    os &lt;&lt; val.titel &lt;&lt; '°' &lt;&lt; val.ort &lt;&lt; '°' &lt;&lt; val.verzeichnis &lt;&lt; '°' &lt;&lt; val.beschreibung &lt;&lt; '°' &lt;&lt; val.genre &lt;&lt; '°' &lt;&lt; val.mb &lt;&lt; '°' &lt;&lt; val.wertung &lt;&lt; '\n';
    return (os);
}

std::istream &amp;operator&gt;&gt;(std::istream &amp;is , filme &amp;val)
{
	is.clear();
	char c;
    std::getline(is, val.titel,'°');
    std::getline(is, val.ort,'°');
    std::getline(is,val.verzeichnis,'°');
    std::getline(is,val.beschreibung,'°');
    is &gt;&gt; val.genre &gt;&gt; c &gt;&gt; val.mb &gt;&gt; c &gt;&gt; val.wertung ;
	return(is);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1872970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1872970</guid><dc:creator><![CDATA[mdmr]]></dc:creator><pubDate>Tue, 23 Mar 2010 14:32:36 GMT</pubDate></item></channel></rss>