<?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[fstream als Membervariable]]></title><description><![CDATA[<p>ist es möglich das wenn man fstream als membervariable hat und in einer methode fstream ifile.open() macht und in einer anderen methode wieder ifile.close() macht?<br />
wie wäre das wenn das eine abstrakte klasse wäre und die klasse, die die klasse erweitert, dieses close() macht?</p>
<pre><code>class abstract
{
  bool Read(bla);
  bool Write(bla)=0;
 protected:
  ifstream ifile;
}

bool abstract::Read(bla)
{
ifile.open();
tu was;

//ifile.close() nicht hier aufrufen, sondern unten
}

bool vonabstractabgeleitet::Write(bla)
{
ofstream ofile;
tu was;
ifile.close();
ofile.close();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/321425/fstream-als-membervariable</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Jul 2026 21:42:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321425.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Nov 2013 20:48:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to fstream als Membervariable on Sun, 10 Nov 2013 20:50:00 GMT]]></title><description><![CDATA[<p>ist es möglich das wenn man fstream als membervariable hat und in einer methode fstream ifile.open() macht und in einer anderen methode wieder ifile.close() macht?<br />
wie wäre das wenn das eine abstrakte klasse wäre und die klasse, die die klasse erweitert, dieses close() macht?</p>
<pre><code>class abstract
{
  bool Read(bla);
  bool Write(bla)=0;
 protected:
  ifstream ifile;
}

bool abstract::Read(bla)
{
ifile.open();
tu was;

//ifile.close() nicht hier aufrufen, sondern unten
}

bool vonabstractabgeleitet::Write(bla)
{
ofstream ofile;
tu was;
ifile.close();
ofile.close();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2364819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364819</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 10 Nov 2013 20:50:00 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Sun, 10 Nov 2013 20:59:11 GMT]]></title><description><![CDATA[<p>Ja, geht, ist aber eine ganz schlechte Idee.<br />
Generell eine schlechte Idee *streams als Member zu haben.<br />
Was willst du denn überhaupt machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2364823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364823</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 10 Nov 2013 20:59:11 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Sun, 10 Nov 2013 21:20:44 GMT]]></title><description><![CDATA[<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="🙂"
    /><br />
also erstmal folgendes bild<br />
<a href="http://www.imagenetz.de/f084ff3d0/1388646_10201371494701857_346125121_n.jpg.html" rel="nofollow">http://www.imagenetz.de/f084ff3d0/1388646_10201371494701857_346125121_n.jpg.html</a></p>
<p>es soll das adapter als design pattern verwendet werden(aus der angabe herausgelesen werden).<br />
nund streitigkeiten gibts unten beim crypto interface. den einer sagt, es soll wie oben gemacht werden und der andere sagt:<br />
read und write werden in der abstrakten klasse implementiert.<br />
in der abstrakten klasse eine protected string membervariable. dieser wird dann von den klassen caesar oder von rsa eben kodiert. wir benutzen es sozusagen als puffer.<br />
nun hier ist das problem allerdings, dass eben rsa z.b für das zeichen h eine 3 oder vierstellige reingeschrieben wird und somit jedesmal mit insert zeichen rumgeschoben werden.</p>
<p>nun was ist besser von den beiden &quot;schlechten&quot; lösungswegen? oder gibts was besseres?</p>
<p>mfg<br />
ACnut</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2364828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364828</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 10 Nov 2013 21:20:44 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Sun, 10 Nov 2013 22:27:05 GMT]]></title><description><![CDATA[<p>i brauch hüfe <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2364838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364838</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Sun, 10 Nov 2013 22:27:05 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Mon, 11 Nov 2013 12:49:30 GMT]]></title><description><![CDATA[<p>leute wo seid ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2364914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364914</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Mon, 11 Nov 2013 12:49:30 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Mon, 11 Nov 2013 13:25:23 GMT]]></title><description><![CDATA[<p>ACnut schrieb:</p>
<blockquote>
<p>leute wo seid ihr?</p>
</blockquote>
<p>Ich habe deine Frage zehnmal lesen müssen, um sie zu verstehen. Kein Scherz. Wenn du lesbarer schreibst, bekommst du auch eher Antworten.</p>
<blockquote>
<p>oder gibts was besseres?</p>
</blockquote>
<p>Das Design gefallt mir schon an der Stelle nicht, wo überhaupt die Cryptoklasse die Daten verwaltet. Dateien lesen und Speichern ist nicht die Aufgabe einer solchen Klasse. Sie arbeitet auf codierten Daten, in egal welcher Form. Man gibt codierte Zeichen hinein und bekomme decodierte Zeichen heraus. Sich um das Besorgen dieser Zeichen zu kümmern ist nicht ihre Aufgabe.<br />
Wenn du unbedingt einen Dateicodierer und Decodierer möchtest, dann lass diesen die Cryptoklasse benutzen. Der Dateicodierer kümmert sich dann um die Dateien. Oder besser gesagt: Um einer Datei. Eine Dateiressource pro Instanz. Wenn du irgendwie mehrere Dateien gleichzeitig in einem Objekt behandeln möchtest, dann schreib noch einen Multidateicodierer, der mehrere Dateicodierer besitzt. Und somit sollten sich alle deine Designfragen eigentlich in Luft auflösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2364923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364923</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 11 Nov 2013 13:25:23 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Mon, 11 Nov 2013 13:28:42 GMT]]></title><description><![CDATA[<p>Also Read ist meist ein Decrypt, Write meist ein Encrypt. Und wenn dann richtig modular. Normalerweise arbeitet (De)crypt mit Streams, also Read/Write werden in einer anderen Klasse realisiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2364924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2364924</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 11 Nov 2013 13:28:42 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Mon, 11 Nov 2013 21:41:49 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/30531">@ACnut</a><br />
Vererbung ist die engste Art der Koppelung, und daher wenn möglich zu vermeiden.<br />
Vererbung im Sinn von &quot;Klasse erbt von rein abstrakter Inerface-Klasse und implementiert dieses Interface&quot; ist noch OK.<br />
Vererbung ala &quot;abgeleitete Klasse greift auf protected Member der Basisklasse zu&quot; ist super unübersichtlich und sollte tunlichst vermieden werden.</p>
<p>Wobei ich mir nicht so sicher bin ob ihr die Aufgabe überhaupt richtig verstanden habt. Euer Diagramm sieht irgendwie bloss verwirrend aus.</p>
<p>Kannst du mal mit Worten beschreiben was ihr machen sollt? Also was vorgegeben ist, und was euer Programm dann können/tun soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365020</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 11 Nov 2013 21:41:49 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Mon, 11 Nov 2013 22:22:14 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a> habs selber dann mein posting gelesen und habs ehrlich gesagt selber nicht verstanden. entschuldigung</p>
<p>ja kann die angabe gerne posten:</p>
<blockquote>
<p>Entwerfen Sie aus der nachfolgend gegebenen<br />
Spezifikation ein Klassendiagramm, instanzieren Sie dieses und implementieren Sie die Funktionalität<br />
entsprechend:<br />
Die Firma High Speed Software Engineering soll für die beiden Kunden Epcos und Nortel Networks<br />
ein Verschlüsselungssystem zur Verfügung stellen.<br />
Es werden 2 Verschlüsselungsalgorithmen unterstützt: Caesar und RSA.<br />
Die Algorithmen sollen zur Laufzeit austauschbar sein. Benützen Sie dafür ein entsprechendes Design<br />
Pattern. Da die beiden Kunden unterschiedliche Schnittstellen wünschen, verwenden Sie ein<br />
internes Interface und delegieren Sie die Aufrufe der beiden Interfaces mit Hilfe eines geeigneten<br />
Design Pattern an die interne Schnittstelle.</p>
</blockquote>
<p>wobei eben die schnittstellen gegeben sind(das heißt die interfaces der beiden klienten und von dem unteren interface/bzw. abstrakte klasse im klassendiagramm</p>
<pre><code>bool ReadFile(std::string const &amp; fileName);
 bool WriteFile(std::string const &amp; fileName);
 void Encrypt();
 void Decrypt();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2365026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365026</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Mon, 11 Nov 2013 22:22:14 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Mon, 11 Nov 2013 22:51:11 GMT]]></title><description><![CDATA[<p>Bisschen umständliches Interface, aber was will man bei solchen Vorgaben machen? <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>Wozu braucht es da einen Stream-Member? Die Funktionen ReadFile und WriteFile machen eine Datei auf, lesen/schreiben in/aus einen internen Buffer, fertig. Kein Grund, den Stream selbst zwischendurch aufzubewahren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365029</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 11 Nov 2013 22:51:11 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Mon, 11 Nov 2013 22:58:57 GMT]]></title><description><![CDATA[<p>wir sollen halt üben wie man die design patterns benutzt xD</p>
<p>genau das war auch der grund wieso ich das topic erstellt hab.</p>
<p>wer von uns beiden recht hat:<br />
mit puffer arbeiten (string als membervariable)-&gt;braucht bei längeren texten viel speicher</p>
<p>oder eben mit einer streammembervariable um einzeln die zeichen zu lesen und direkt wieder zurückzuschreiben-&gt;was ich persönlich unschön finde, da es meiner meinung nach aufwändiger ist (hat aber der lehrer selbst empfohlen, die zeichen einzeln zu lesen und wieder zurückzuschreiben. auch hat er das mit dem &quot;zwischenlagern&quot; der stream-variable nicht verneint)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365032</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Mon, 11 Nov 2013 22:58:57 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Mon, 11 Nov 2013 23:21:42 GMT]]></title><description><![CDATA[<p>Hm.<br />
Ich würde das komplett anders aufziehen, aber OK.<br />
Euer Lehrer/Prof will wohl wirklich ein schlechtes Design haben.</p>
<p>Wenn ihr die Signaturen von ReadFile, WriteFile, Encrypt und Decrypt nicht anpassen könnt/dürft, dann bleibt nur mehr eine unsaubere Pfusch-Lösung übrig.</p>
<p>In dem Fall würde ich ganz klar die Variante bevorzugen wo <code>ReadFile</code> und <code>WriteFile</code> in der Basisklasse implementiert sind, und zum &quot;Datenaustausch&quot; ein protected <code>std::string</code> (bzw. besser: <code>std::vector&lt;unsigned char&gt;</code> ) verwendet wird.</p>
<p>Weil es keinen Sinn macht die Funktionalität von <code>WriteFile</code> in beiden &quot;Crypto&quot; Klassen zu duplizieren. Und weil durch das gemeinsame <code>WriteFile</code> auch der &quot;Contract&quot; zwischen der Basisklasse und den abgeleiteten Klassen einfacher wird: Die abgeleiteten Klassen müssen nur Encrypt/Decrypt so implementieren, dass die im protected Buffer stehenden Daten ver- bzw. entschlüsselt werden. Und nicht mit irgendwelchen Files rumhantieren. Die ganze IO Geschichte ist dann Sache der gemeinsamen Basisklasse.</p>
<p>Eine Pfusch-Lösung bleibt es aber trotzdem.</p>
<p>Die Klassen Caesar und RSA sollten nicht von einer Klasse abgeleitet sein, die gleichzeitig noch IO macht.<br />
Besser wäre es wenn die abstrakte &quot;Crypto&quot; Basisklasse gar keinen IO macht, sondern den Datenpuffer als Parameter an die Decrypt bzw. Encrypt Funktion übergeben bekommt.<br />
Die Klasse &quot;Crypto&quot; wäre dann eine rein abstrakte Basisklasse, die selbst gar keinen Code enthält (und auch keine Datenmember).</p>
<p>Dann könnte man eine weitere Klasse machen, die man z.B. &quot;FileCrypto&quot; nennt, die den IO Teil implementiert, und den Ver- bzw. Entschlüsselungs-Teil an die &quot;Crypto&quot; Klasse delegiert.<br />
Diese &quot;FileCrypto&quot; Klasse müsste (bzw. sollte) dabei nichtmal &quot;Crypto&quot; Objekte nichtmal als Member halten, sondern bekommt diese wiederrum als Parameter an die Encrypt/Decrypt Funktion mitgegeben.</p>
<p>Also inetwa so:</p>
<pre><code class="language-cpp">class Crypto
{
public:
    virtual void Encrypt(std::vector&lt;unsigned char&gt;&amp; inout_buffer) = 0;
    virtual void Decrypt(std::vector&lt;unsigned char&gt;&amp; inout_buffer) = 0;
};

class RSA : public Crypto
    // ...

class Caesar : public Crypto
    // ...

class FileCrypto
{
public:
    void EncryptFile(std::string const&amp; path, Crypto&amp; codec);
    void DecryptFile(std::string const&amp; path, Crypto&amp; codec);
};
</code></pre>
<p>Die Adapterklassen enthalten dann jeweils ein FileCrypto Member. Die Crypto-Instanzen können im Prinzip lokal im Encrypt/Decrypt Aufruf der jeweiligen Adapterklasse angelegt werden. Bzw. wenn es verlangt ist auch als Member gehalten werden, z.B. wenn man die u.U. aufwendige Initialisierung des RSA Codecs nicht bei jedem Funktionsaufruf machen möchte.</p>
<p>Bzw. genaugenommen ist die FileCrypto Klasse gar keine Klasse, weil ihre Objekte leer sind. Es handelt sich hier lediglich um zwei freie Funktionen. Also sollte man diese auch nicht als Klasse, sondern eben als freie Funktionen modellieren. Wobei es sein kann dass eurem Lehrer/Prof das zu wenig &quot;objektig&quot; ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365034</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 11 Nov 2013 23:21:42 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Mon, 11 Nov 2013 23:40:17 GMT]]></title><description><![CDATA[<p>ACnut schrieb:</p>
<blockquote>
<p>oder eben mit einer streammembervariable um einzeln die zeichen zu lesen und direkt wieder zurückzuschreiben-&gt;was ich persönlich unschön finde, da es meiner meinung nach aufwändiger ist</p>
</blockquote>
<p>Naja &quot;aufwendiger&quot; würde ich nicht sagen. Ist es zwar, aber das ist nicht immer das beste Kriterium. Es ist komplizierter, in Sinn von komplizierter zu verstehen. Einfach (zu verstehen) ist gut.</p>
<blockquote>
<p>(hat aber der lehrer selbst empfohlen, die zeichen einzeln zu lesen und wieder zurückzuschreiben. auch hat er das mit dem &quot;zwischenlagern&quot; der stream-variable nicht verneint)</p>
</blockquote>
<p>Also wie das &quot;einzeln einlesen&quot; sich mit RSA vertragen soll erschliesst sich mir nicht ganz. Sollen die Zeichen alle einzeln mit RSA ver- bzw. entschlüsselt werden? Oder soll ein symmetrischer Stream-Cipher verwendet werden, der nur zum Abspeichern des symmetrischen Schlüssels RSA verwendet?</p>
<p>Ist aber im Prinzip wurst.<br />
Wenn man die Daten &quot;streamen&quot; will, dann muss das Interface von &quot;Crypto&quot; geändert werden. Alles andere wäre blanker Wahnsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365038</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 11 Nov 2013 23:40:17 GMT</pubDate></item><item><title><![CDATA[Reply to fstream als Membervariable on Tue, 12 Nov 2013 19:06:25 GMT]]></title><description><![CDATA[<p>so hätte ich es eigentlich auch gelöst, aber da es in der zeit unmöglich war noch was zu ändern (die abgabe war heute), haben wir es mit der filestreammembervariablenauslagerungs-Methode (ei neues Wort in der deutschen Sprche xD) gelöst.<br />
hätte die antworten bissl früher gebraucht, aber da ich mich schlecht ausgedrückt hab, war es ausshließlich mein fehler <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>mfg<br />
ACnut</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365187</guid><dc:creator><![CDATA[ACnut]]></dc:creator><pubDate>Tue, 12 Nov 2013 19:06:25 GMT</pubDate></item></channel></rss>