<?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[Problem beim Arbeiten mit Konstruktoren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich steh grad irgendwie auf der Leitung... Es geht um Konstruktoren.</p>
<p>Ich habe ein Programm geschrieben, das ein Textfile erzeugt und innerhalb eines bereits bestehenden Programms aufgerufen wird.</p>
<p>Jetzt kam aber noch ein weiteres Programm dazu, das eigentlich ähnliche Funktionen hat und nun gibt es einiges doppelt.</p>
<p>Jetzt wollte ich die Initialisierung mit Hilfe von Konstruktoren erledigen, so dass es für beide Programme funktioniert, aber nur einmal aufgerufen werden muss. Und genau da liegt das Problem. Irgendwie komm ich mit den Konstruktoren nicht wirklich klar. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Hier ein Beispiel:</p>
<pre><code class="language-cpp">// Meine Klasse
class Beispiel
{
public:
Beispiel(); // Constructor
~Beispiel(); // Destructor

void testfunktion(string kreuz, int i, string gitter, string typ);
void weitereFunktion(string kreuz, string quer, string verzeichnis, int n, int i, string gitter, string typ, string name);
};
</code></pre>
<pre><code class="language-cpp">// Mein 1. Programm:
Beispiel::Beispiel()
{ }

Beispiel::~ Beispiel()
{ }

void Beispiel::testfunktion(string kreuz, int i, string gitter, string typ) {

    Beispiel Testfall;

    Testfall.kreuz = kreuz;
    Testfall.gitter = gitter;
    Testfall.aktiv = i + 1;
    Testfall.typ = typ;

    Testfall.eins = geteins();
    Testfall.zwei = getzwei();
    Testfall.drei = getdrei();

    Testfall.vier = Testfall.eins / Testfall.zwei;
    Testfall.fuenf = Testfall.zwei / Testfall.drei;
    Testfall.sechs = Testfall.vier * Testfall.fuenf;

    Testfall.h = getH(i,0);
}
</code></pre>
<pre><code class="language-cpp">// Wird folgendermaßen in der main-Funktion aufgerufen:
Beispiel ABCD;
ABCD.testfunktion(kreuz, i, gitter, typ);
</code></pre>
<pre><code class="language-cpp">// Mein 2. Programm:
Beispiel::Beispiel()
{ }

Beispiel::~ Beispiel()
{ }

void Beispiel::weitereFunktion(string kreuz, string quer, string verzeichnis, int n, int i, string gitter, string typ, string name) {

    Beispiel Test;
    Test.kreuz = kreuz;
    Test.quer = quer;
    Test.verzeichnis = verzeichnis;
    Test.ecken = n;
    Test.gitter = gitter;
    Test.aktiv = i + 1;
    Test.typ = typ;
    Test.name = name;

    Test.eins = geteins();
    Test.zwei = getzwei();
    Test.drei = getdrei();

    Test.vier = Test.eins / Test.zwei;
    Test.fuenf = Test.zwei / Test.drei;
    Test.sechs = Test.vier * Test.fuenf;

    Test.h = getH(i,0);
}
</code></pre>
<pre><code class="language-cpp">wird folgendermaßen in der main-Funktion aufgerufen:
Beispiel ABCD;
CFXpre.weitereFunktion(kreuz, quer, verzeichnis, n, i, gitter, typ, name);
</code></pre>
<p>Die Beispiele zeigen jetzt jeweils nur Ausschnitte mit den betreffenden Teilen.<br />
In den beiden Programmen kommt also einiges doppelt vor, lediglich bei dem 2. Programm werden mehr Parameter übergeben und initialisiert.<br />
Wenn ich das Ganze jetzt mit Konstruktoren realisieren will, dann muss es doch irgendwie so gehen:</p>
<p>In der Klasse brauche ich also zusätzlich zum Default-Konstruktor mehr Konstruktoren:</p>
<pre><code class="language-cpp">Beispiel();
Beispiel(string kreuz, int i, string gitter, string typ);
Beispiel(string kreuz, string quer, string verzeichnis, int n, int i, string gitter, string typ, string name);
</code></pre>
<p>Dann stünde ja in meinem 1. Programm folgendes:</p>
<pre><code class="language-cpp">Beispiel::Beispiel() {
    Beispiel::eins = geteins();
    Beispiel::zwei = getzwei();
    Beispiel::drei = getdrei();

    Beispiel::vier = Beispiel::eins / Beispiel::zwei;
    Beispiel::fuenf = Beispiel::zwei / Beispiel::drei;
    Beispiel::sechs = Beispiel::vier * Beispiel::fuenf;

    Beispiel::h = getH(i,0);
}

Beispiel::Beispiel(string kreuz, int i, string gitter, string typ) {
    Beispiel::kreuz = kreuz;
    Beispiel::gitter = gitter;
    Beispiel::aktiv = i + 1;
    Beispiel::typ = typ;
}

Beispiel::~ Beispiel()
{ }

void Beispiel::testfunktion() {
// hier stehen jetzt also nur noch die direkten Aufrufe, um das Textfile zu erzeugen
}
</code></pre>
<p>Jetzt müssen dann aber doch irgendwie mehrere Objekte beim Aufruf erzeugt werden, oder? Und wie kann das im 2. Programm dann auch verwendet werden?</p>
<p>Vielleicht könnt Ihr mir ja etwas auf die Sprünge helfen.<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196977/problem-beim-arbeiten-mit-konstruktoren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 00:03:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196977.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Nov 2007 10:32:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim Arbeiten mit Konstruktoren on Mon, 05 Nov 2007 10:32:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich steh grad irgendwie auf der Leitung... Es geht um Konstruktoren.</p>
<p>Ich habe ein Programm geschrieben, das ein Textfile erzeugt und innerhalb eines bereits bestehenden Programms aufgerufen wird.</p>
<p>Jetzt kam aber noch ein weiteres Programm dazu, das eigentlich ähnliche Funktionen hat und nun gibt es einiges doppelt.</p>
<p>Jetzt wollte ich die Initialisierung mit Hilfe von Konstruktoren erledigen, so dass es für beide Programme funktioniert, aber nur einmal aufgerufen werden muss. Und genau da liegt das Problem. Irgendwie komm ich mit den Konstruktoren nicht wirklich klar. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Hier ein Beispiel:</p>
<pre><code class="language-cpp">// Meine Klasse
class Beispiel
{
public:
Beispiel(); // Constructor
~Beispiel(); // Destructor

void testfunktion(string kreuz, int i, string gitter, string typ);
void weitereFunktion(string kreuz, string quer, string verzeichnis, int n, int i, string gitter, string typ, string name);
};
</code></pre>
<pre><code class="language-cpp">// Mein 1. Programm:
Beispiel::Beispiel()
{ }

Beispiel::~ Beispiel()
{ }

void Beispiel::testfunktion(string kreuz, int i, string gitter, string typ) {

    Beispiel Testfall;

    Testfall.kreuz = kreuz;
    Testfall.gitter = gitter;
    Testfall.aktiv = i + 1;
    Testfall.typ = typ;

    Testfall.eins = geteins();
    Testfall.zwei = getzwei();
    Testfall.drei = getdrei();

    Testfall.vier = Testfall.eins / Testfall.zwei;
    Testfall.fuenf = Testfall.zwei / Testfall.drei;
    Testfall.sechs = Testfall.vier * Testfall.fuenf;

    Testfall.h = getH(i,0);
}
</code></pre>
<pre><code class="language-cpp">// Wird folgendermaßen in der main-Funktion aufgerufen:
Beispiel ABCD;
ABCD.testfunktion(kreuz, i, gitter, typ);
</code></pre>
<pre><code class="language-cpp">// Mein 2. Programm:
Beispiel::Beispiel()
{ }

Beispiel::~ Beispiel()
{ }

void Beispiel::weitereFunktion(string kreuz, string quer, string verzeichnis, int n, int i, string gitter, string typ, string name) {

    Beispiel Test;
    Test.kreuz = kreuz;
    Test.quer = quer;
    Test.verzeichnis = verzeichnis;
    Test.ecken = n;
    Test.gitter = gitter;
    Test.aktiv = i + 1;
    Test.typ = typ;
    Test.name = name;

    Test.eins = geteins();
    Test.zwei = getzwei();
    Test.drei = getdrei();

    Test.vier = Test.eins / Test.zwei;
    Test.fuenf = Test.zwei / Test.drei;
    Test.sechs = Test.vier * Test.fuenf;

    Test.h = getH(i,0);
}
</code></pre>
<pre><code class="language-cpp">wird folgendermaßen in der main-Funktion aufgerufen:
Beispiel ABCD;
CFXpre.weitereFunktion(kreuz, quer, verzeichnis, n, i, gitter, typ, name);
</code></pre>
<p>Die Beispiele zeigen jetzt jeweils nur Ausschnitte mit den betreffenden Teilen.<br />
In den beiden Programmen kommt also einiges doppelt vor, lediglich bei dem 2. Programm werden mehr Parameter übergeben und initialisiert.<br />
Wenn ich das Ganze jetzt mit Konstruktoren realisieren will, dann muss es doch irgendwie so gehen:</p>
<p>In der Klasse brauche ich also zusätzlich zum Default-Konstruktor mehr Konstruktoren:</p>
<pre><code class="language-cpp">Beispiel();
Beispiel(string kreuz, int i, string gitter, string typ);
Beispiel(string kreuz, string quer, string verzeichnis, int n, int i, string gitter, string typ, string name);
</code></pre>
<p>Dann stünde ja in meinem 1. Programm folgendes:</p>
<pre><code class="language-cpp">Beispiel::Beispiel() {
    Beispiel::eins = geteins();
    Beispiel::zwei = getzwei();
    Beispiel::drei = getdrei();

    Beispiel::vier = Beispiel::eins / Beispiel::zwei;
    Beispiel::fuenf = Beispiel::zwei / Beispiel::drei;
    Beispiel::sechs = Beispiel::vier * Beispiel::fuenf;

    Beispiel::h = getH(i,0);
}

Beispiel::Beispiel(string kreuz, int i, string gitter, string typ) {
    Beispiel::kreuz = kreuz;
    Beispiel::gitter = gitter;
    Beispiel::aktiv = i + 1;
    Beispiel::typ = typ;
}

Beispiel::~ Beispiel()
{ }

void Beispiel::testfunktion() {
// hier stehen jetzt also nur noch die direkten Aufrufe, um das Textfile zu erzeugen
}
</code></pre>
<p>Jetzt müssen dann aber doch irgendwie mehrere Objekte beim Aufruf erzeugt werden, oder? Und wie kann das im 2. Programm dann auch verwendet werden?</p>
<p>Vielleicht könnt Ihr mir ja etwas auf die Sprünge helfen.<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1397923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1397923</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Mon, 05 Nov 2007 10:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Konstruktoren on Mon, 05 Nov 2007 10:36:00 GMT]]></title><description><![CDATA[<p>Was hast du denn da vor? Und wie sollen die Konstruktoren dabei weiterhelfen?</p>
<p>(wobei - innerhalb einer &quot;Beispiel&quot;-Methode ein weiteres Objekt vom Typ &quot;Beispiel&quot; anzulegen, ist in den meisten Fällen nicht notwendig ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1397925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1397925</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 05 Nov 2007 10:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Konstruktoren on Mon, 05 Nov 2007 13:37:24 GMT]]></title><description><![CDATA[<p>Also ich kenn mich in C++ noch nicht so gut aus, aber im Prinzip geht es darum:</p>
<p>Ich habe 2 Funktionen in ein bestehendes Programm integriert.<br />
Es läuft alles, aber jetzt habe ich gesehen, dass einiges in den beiden Funktionen doppelt vorkommt. In beiden Funktionen werden eben am Anfang einige Variablen initialisiert.</p>
<p>Ich möchte jetzt also, dass bei den doppelten Initialisierungen nur noch eine übrig bleibt. Funktioniert das denn nicht mit einem Konstruktor?</p>
<p>Das Problem ist halt nur, dass die Parameter, die den Funktionen vom Programm übergeben werden, unterschiedlich sind. D.h. ich brauche auch mehrere verschiedene Konstruktoren, oder?</p>
<p>Wenn ich in der einen Funktionen jetzt einen Konstruktor erstelle, der die Variablen initialisiert, dann muss ich genau diesen Konstruktor ja auch in der anderen Funktion aufrufen, aber irgendwie will das nicht so recht funktionieren...</p>
<p>Wie funktioniert das denn prinzipiell mit mehreren Konstruktoren in verschiedenen Funktionen...?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398031</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Mon, 05 Nov 2007 13:37:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Konstruktoren on Mon, 05 Nov 2007 13:45:05 GMT]]></title><description><![CDATA[<p>Nur wenn die Funktionen ähnliche Variablen verwenden, reicht das vermutlich nicht als Ansatzpunkt, um sie zusammenzufassen. Sowas wirst du bestenfalls schaffen, wenn du gleichartige Funktionsteile (Anweisungen) findest - die könntest du eventuell in eine Hilfsfunktion auslagern, die von allen Seiten aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398035</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 05 Nov 2007 13:45:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Konstruktoren on Tue, 06 Nov 2007 06:55:41 GMT]]></title><description><![CDATA[<p>Ok, ich hab jetzt also so eine Hilfsfunktion erstellt. Die Datei habe ich bei meinem 1. Programm abgelegt. Von dem 2. Programm aus kann ich nun aber nicht darauf zugreifen, weil es sich ja in einem anderen Ordner befindet.<br />
Gibt es dafür auch eine Möglichkeit, die Funktion aufzurufen oder muss ich da das Makefile irgendwie anpassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398405</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Tue, 06 Nov 2007 06:55:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Konstruktoren on Tue, 06 Nov 2007 08:10:36 GMT]]></title><description><![CDATA[<p>Wenn ich dein Problem jetzt mal versuche in wenigen Zeilen zu beschreiben:</p>
<p>1. Du Hast zwei Programme, welche <em>ähnliche Funktionalitäten</em> aufweisen.<br />
2. Diese beiden Programme sollen daher auf eine <em>gemeinsame Code-Basis</em> (ich nenne das mal &quot;Module&quot;) aufbauen, welche die von beiden Programmen geteilten Funktionalitäten bereitstellt.</p>
<p>Ich sehe hier noch keinen Grund, welcher Klassen rechtfertigte. Es ist durchaus möglich, Funktionalitäten in Klassen zu pressen (via statischer Methoden / Klassenmethoden).</p>
<p>Es macht meines Erachtens jedoch keinen Sinn, die (unterschiedlichen) Funktionen aus (unterschiedlichen) Programmen in <strong>einer</strong> Klasse bereitzustellen.</p>
<p>Mein Lösungsansatz wäre:<br />
Analysieren, welche Funktionalitäten von beiden Programmen geteilt werden. Diese können dann in einer Klasse gepresst werden (alternativ &quot;tun&quot; es auch freidefinierte Funktionen ggf. in einem Namespace).</p>
<p>Benötigt nun ein einzelnes Programm alternative oder geänderte Funktionalitäten, kann es die vorher definierte Klasse ableiten (Stichwort: Vererbung) und die neu benötigten Funktionalitäten hinzufügen oder redefinieren.</p>
<p>Grüße...</p>
<p>Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398424</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 06 Nov 2007 08:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Arbeiten mit Konstruktoren on Tue, 06 Nov 2007 09:17:04 GMT]]></title><description><![CDATA[<p>Ok, danke.<br />
Ich hab's hinbekommen, jetzt läuft zumindest alles wieder.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398478</guid><dc:creator><![CDATA[LadyM]]></dc:creator><pubDate>Tue, 06 Nov 2007 09:17:04 GMT</pubDate></item></channel></rss>