<?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[Konstrukter Problem?]]></title><description><![CDATA[<p>Hallo LEute ich bins schon wieder. Diesmal mit einer anderen Aufgabe an der ich mir mal wieder die Haare ausraufen könnte.</p>
<p>Also ich habe eine komplex-Klasse geschrieben nur so aus lernzwecken und nun kann ich nicht Werte hinzufügen per:</p>
<pre><code class="language-cpp">dcomplex *neu = new dcomplex
neu(4,5);
</code></pre>
<p>es geht auch nicht:</p>
<pre><code class="language-cpp">dcomplex zahl(4,7); //OK!
zahl(4,6); //Fehler o_O
</code></pre>
<p>Wieso kann ich im letzten Beispiel damit initialisieren aber später keinen wert ändern?<br />
Also da verstehe ich mal wieder etwas Grundsätzliches nicht.<br />
Fehlermeldung:</p>
<pre><code>error C2064: Ausdruck ergibt keine Funktion, die 2 Argumente übernimmt
</code></pre>
<p>Liegt das daran,weils nen Konstruktor ist und der nur beim Erzeugen des Objektes aufgerufen wird?<br />
Wie muss ich das sonst denn aufrufen? Weil <a href="http://zahl.re" rel="nofollow">zahl.re</a>(4) geht ja nicht wegen private. ausßerdem wäre es umständlich.</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;dcomplex.h&quot;

using namespace std;

int main(){
	getchar();
	dcomplex zahl1(4,5), zahl2(3,-2), zahl3(0,0), zahl4(4), zahl5;
	zahl1.disp(), zahl2.disp(), zahl3.disp(),zahl4.disp();
	getchar();
	dcomplex *neu = new dcomplex(4,5);  //Warum keine Initialisierung über z.B. neu(3,7);
	zahl5(8,5);
	zahl5.disp();
	neu-&gt;disp();
	getchar();
	delete neu;
	getchar();
	return 0;
}
</code></pre>
<p>dcomplex.h</p>
<pre><code class="language-cpp">class dcomplex{
private:
	double re,im;
public:
	dcomplex();
	~dcomplex();
	dcomplex(double x);
	dcomplex(double x,double y);
	void disp();
};
</code></pre>
<p>dcomplex.cpp</p>
<pre><code class="language-cpp">#include &quot;dcomplex.h&quot;
#include &lt;iostream&gt;

using namespace std;

dcomplex::dcomplex(){
	cout &lt;&lt; &quot;Objekt erzeugt.\n&quot;;
}
dcomplex::~dcomplex(){
	cout &lt;&lt; &quot;Objekt entfernt.\n&quot;;
}
dcomplex::dcomplex(double x){
	re = 0;
	im = x;
	cout &lt;&lt; &quot;Objekt erzeugt.\n&quot;;
}
dcomplex::dcomplex(double x, double y){
	re = x;
	im = y;
	cout &lt;&lt; &quot;Objekt erzeugt.\n&quot;;
}
void dcomplex::disp(){
	if(im &gt;=0) cout &lt;&lt; re &lt;&lt; &quot; + j&quot; &lt;&lt; im &lt;&lt; endl;
	else cout &lt;&lt; re &lt;&lt; &quot; - j&quot; &lt;&lt; -im &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/221807/konstrukter-problem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 18:37:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221807.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Sep 2008 18:26:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 18:26:13 GMT]]></title><description><![CDATA[<p>Hallo LEute ich bins schon wieder. Diesmal mit einer anderen Aufgabe an der ich mir mal wieder die Haare ausraufen könnte.</p>
<p>Also ich habe eine komplex-Klasse geschrieben nur so aus lernzwecken und nun kann ich nicht Werte hinzufügen per:</p>
<pre><code class="language-cpp">dcomplex *neu = new dcomplex
neu(4,5);
</code></pre>
<p>es geht auch nicht:</p>
<pre><code class="language-cpp">dcomplex zahl(4,7); //OK!
zahl(4,6); //Fehler o_O
</code></pre>
<p>Wieso kann ich im letzten Beispiel damit initialisieren aber später keinen wert ändern?<br />
Also da verstehe ich mal wieder etwas Grundsätzliches nicht.<br />
Fehlermeldung:</p>
<pre><code>error C2064: Ausdruck ergibt keine Funktion, die 2 Argumente übernimmt
</code></pre>
<p>Liegt das daran,weils nen Konstruktor ist und der nur beim Erzeugen des Objektes aufgerufen wird?<br />
Wie muss ich das sonst denn aufrufen? Weil <a href="http://zahl.re" rel="nofollow">zahl.re</a>(4) geht ja nicht wegen private. ausßerdem wäre es umständlich.</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;dcomplex.h&quot;

using namespace std;

int main(){
	getchar();
	dcomplex zahl1(4,5), zahl2(3,-2), zahl3(0,0), zahl4(4), zahl5;
	zahl1.disp(), zahl2.disp(), zahl3.disp(),zahl4.disp();
	getchar();
	dcomplex *neu = new dcomplex(4,5);  //Warum keine Initialisierung über z.B. neu(3,7);
	zahl5(8,5);
	zahl5.disp();
	neu-&gt;disp();
	getchar();
	delete neu;
	getchar();
	return 0;
}
</code></pre>
<p>dcomplex.h</p>
<pre><code class="language-cpp">class dcomplex{
private:
	double re,im;
public:
	dcomplex();
	~dcomplex();
	dcomplex(double x);
	dcomplex(double x,double y);
	void disp();
};
</code></pre>
<p>dcomplex.cpp</p>
<pre><code class="language-cpp">#include &quot;dcomplex.h&quot;
#include &lt;iostream&gt;

using namespace std;

dcomplex::dcomplex(){
	cout &lt;&lt; &quot;Objekt erzeugt.\n&quot;;
}
dcomplex::~dcomplex(){
	cout &lt;&lt; &quot;Objekt entfernt.\n&quot;;
}
dcomplex::dcomplex(double x){
	re = 0;
	im = x;
	cout &lt;&lt; &quot;Objekt erzeugt.\n&quot;;
}
dcomplex::dcomplex(double x, double y){
	re = x;
	im = y;
	cout &lt;&lt; &quot;Objekt erzeugt.\n&quot;;
}
void dcomplex::disp(){
	if(im &gt;=0) cout &lt;&lt; re &lt;&lt; &quot; + j&quot; &lt;&lt; im &lt;&lt; endl;
	else cout &lt;&lt; re &lt;&lt; &quot; - j&quot; &lt;&lt; -im &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1576058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576058</guid><dc:creator><![CDATA[ntfs2008]]></dc:creator><pubDate>Wed, 03 Sep 2008 18:26:13 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 18:39:26 GMT]]></title><description><![CDATA[<p>Muss ich dafür = überladen???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576070</guid><dc:creator><![CDATA[ntfs2008]]></dc:creator><pubDate>Wed, 03 Sep 2008 18:39:26 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 18:52:56 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> ein konstruktor dient zum erstellen einer instanz einer klasse damit kannst du nachher nicht mehr die werte ändern!!!</p>
<p>1).<br />
Werte werden geändert indem du Get/set-funktionen oder sonstige funktionen der klasse aufrufst.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">void set_x(int xx)
{
    x = xx;
}

int get_x()
{
    return x;
}
</code></pre>
<p>2). benutze initialisierungsliste in Konstruktor</p>
<pre><code class="language-cpp">dcomplex::dcomplex(double x)
:re(0),im(x)
{
    cout &lt;&lt; &quot;Objekt erzeugt.\n&quot;;
}
</code></pre>
<p>2). Du solltest an deinem style arbeiten...</p>
<pre><code class="language-cpp">if(im &gt;=0) cout &lt;&lt; re &lt;&lt; &quot; + j&quot; &lt;&lt; im &lt;&lt; endl;
    else cout &lt;&lt; re &lt;&lt; &quot; - j&quot; &lt;&lt; -im &lt;&lt; endl;
</code></pre>
<p>sieht einfach nur schrecklich aus, wenn du solchen code schreibst haben andere schwierigkeiten ihn zu verstehen</p>
<p>mein vorschlag:</p>
<pre><code class="language-cpp">if(im &gt;= 0)
    cout &lt;&lt; re &lt;&lt; &quot; + j&quot; &lt;&lt; im &lt;&lt; endl;
else
    cout &lt;&lt; re &lt;&lt; &quot; - j&quot; &lt;&lt; -im &lt;&lt; endl
</code></pre>
<pre><code class="language-cpp">zahl1.disp(), zahl2.disp(), zahl3.disp(),zahl4.disp();
</code></pre>
<p>warum hast du kommas geschrieben, ich habe mich echt am anfang gefragt was das soll...<br />
den komma operator für mehrere anweisungen solltest überhaupt nur, meiner meinung nach, in schleifen benutzen, ansonsten wird der code unübersichtlich.<br />
ich versteh nicht waru es so schwer ein ; zu schreiben und eine neue reihe anzufangen</p>
<pre><code class="language-cpp">zahl1.disp(); 
zahl2.disp(); 
zahl3.disp();
zahl4.disp();
</code></pre>
<p>nein du kannst nicht den operator= dafür gebrauchen, da dann beide operanden DComplex instanzen sein müssen, du kannst aber eine funktion schreiben, die zwei parameter nimmt und dann einfuegt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576079</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Wed, 03 Sep 2008 18:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 19:35:49 GMT]]></title><description><![CDATA[<p>uhsuhz schrieb:</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> ein konstruktor dient zum erstellen einer instanz einer klasse damit kannst du nachher nicht mehr die werte ändern!!!</p>
<p>1).<br />
Werte werden geändert indem du Get/set-funktionen oder sonstige funktionen der klasse aufrufst.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">void set_x(int xx)
{
    x = xx;
}

int get_x()
{
    return x;
}
</code></pre>
<p>2). benutze initialisierungsliste in Konstruktor</p>
<pre><code class="language-cpp">dcomplex::dcomplex(double x)
:re(0),im(x)
{
    cout &lt;&lt; &quot;Objekt erzeugt.\n&quot;;
}
</code></pre>
</blockquote>
<p>ja das hatte ich mir schon gedacht. naja okay wieder was gelernt.</p>
<p>uhsuhz schrieb:</p>
<blockquote>
<p>2). Du solltest an deinem style arbeiten...</p>
<pre><code class="language-cpp">if(im &gt;=0) cout &lt;&lt; re &lt;&lt; &quot; + j&quot; &lt;&lt; im &lt;&lt; endl;
    else cout &lt;&lt; re &lt;&lt; &quot; - j&quot; &lt;&lt; -im &lt;&lt; endl;
</code></pre>
<p>sieht einfach nur schrecklich aus, wenn du solchen code schreibst haben andere schwierigkeiten ihn zu verstehen</p>
<p>mein vorschlag:</p>
<pre><code class="language-cpp">if(im &gt;= 0)
    cout &lt;&lt; re &lt;&lt; &quot; + j&quot; &lt;&lt; im &lt;&lt; endl;
else
    cout &lt;&lt; re &lt;&lt; &quot; - j&quot; &lt;&lt; -im &lt;&lt; endl
</code></pre>
</blockquote>
<p>mhh naja so großartig anders ist dies nun auch nicht, ohne mich jetzt über deine zurecht geäußerte meinung beschweren zu wollen.<br />
wie gesagt mir fehlt einfach die erfahrung, aber dennoch gebe ich mir mühe und es macht mir auch spaß etwas dazu zu lernen.</p>
<p>uhsuhz schrieb:</p>
<blockquote>
<pre><code class="language-cpp">zahl1.disp(), zahl2.disp(), zahl3.disp(),zahl4.disp();
</code></pre>
<p>warum hast du kommas geschrieben, ich habe mich echt am anfang gefragt was das soll...<br />
den komma operator für mehrere anweisungen solltest überhaupt nur, meiner meinung nach, in schleifen benutzen, ansonsten wird der code unübersichtlich.<br />
ich versteh nicht waru es so schwer ein ; zu schreiben und eine neue reihe anzufangen</p>
<pre><code class="language-cpp">zahl1.disp(); 
zahl2.disp(); 
zahl3.disp();
zahl4.disp();
</code></pre>
</blockquote>
<p>wo ist da denn eigentlich der unterschied? ich finde das mit dem, nen bisschen übersichtlicher. kannst du mir den genaueren grund erläutern oder ist das einfach nur eine frage des übersichtlichen aufbaus?</p>
<p>danke timo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576101</guid><dc:creator><![CDATA[ntfs2008]]></dc:creator><pubDate>Wed, 03 Sep 2008 19:35:49 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 20:05:57 GMT]]></title><description><![CDATA[<p>naja einen unterschied im resultat gibt es keinen, nur könnte man beim überfliegen des codes mal was verwechseln, was mir geschehen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576107</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Wed, 03 Sep 2008 20:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 20:40:40 GMT]]></title><description><![CDATA[<p>uhsuhz schrieb:</p>
<blockquote>
<p>naja einen unterschied im resultat gibt es keinen, nur könnte man beim überfliegen des codes mal was verwechseln, was mir geschehen ist.</p>
</blockquote>
<p>Ich finde dei Mehrzeilervariante auch viel lesbarer. Ich sehe da gerade, dass auf 4 Objekte des gleichen Typs die gleiche Funktion aufgerufen wird. Ich muss da praktisch nix lesen. Meine Augen erkennen das als ganzes. In einer Linie muss ich alles lesen, damit ich verstehe, was du machst.</p>
<p>Das ganze kann mit Speedreading erklärt werden. Es ist ja so, dass unser Hirn vertikale Anordnungen auch sehr viel schneller aufnehmen kann, als lange Horizontale Zeilen. Ist mitunter ein Grund, warum Zeitungen diese Gliederung haben, dass nur sehr wenig auf eine Zeile kommt und dann auf die nächste Zeile gesprungen wird.<br />
Vor allem bei Programmierern wird das Vertikale Lesevermögen noch viel besser trainiert sein, als die Horizontale.</p>
<p>btw:<br />
<a href="http://de.wikipedia.org/wiki/Schnelllesen" rel="nofollow">Speedreading:</a> Ein sehr interessantes Thema und kann im Studium sicher noch viel helfen. Man braucht viel Übung, aber man merkt die Fortschritte schon, wenn man viel liest. (Wer tut das im Studium nicht. <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/1576129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576129</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 03 Sep 2008 20:40:40 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 22:09:02 GMT]]></title><description><![CDATA[<p>Na das mit dem &quot;Speedreading&quot; ist natürlich verständlich. <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>
<p>Soo ich habe dann mal ein wenig weiter gearbeitet und laut Aufgabenstellung alles zusammen gebastelt. Es funktioniert sogar ^^<br />
Meckert einfach mal los, wenn euch was nicht gefällt.<br />
Es ist nur ein wenig durch die Aufgabenstellung durcheinander, sonst hätt ich es wohl einheitlicher gemacht.<br />
Was mir nur nicht gefällt ist dieses doppelt und dreifache includieren und &quot;using namespace std;&quot;, nur wenn ich es weglasse bekomme ich Fehler.</p>
<p>dcomplex.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class dcomplex{
private:
	double re,im;
public:
	//Konstruktoren &amp; Destruktor
	dcomplex();
	~dcomplex();
	dcomplex(double);
	dcomplex(double,double);

	//Ueberladene Operatoren
	dcomplex operator + (dcomplex);
	dcomplex operator * (dcomplex);
	friend ostream&amp; operator &lt;&lt; (ostream &amp;os, const dcomplex &amp;c);
	friend istream&amp; operator &gt;&gt; (istream &amp;is, dcomplex &amp;c);

	//Komponentenfunktionen
	void disp();
	void set(double,double);
	double r();
	double i();
	double betrag();
	double winkel();
	dcomplex konj();
	dcomplex kehr();

};
</code></pre>
<p>dcomplex.cpp</p>
<pre><code class="language-cpp">#include &quot;dcomplex.h&quot;
#include &lt;iostream&gt;
#include &lt;cmath&gt;

using namespace std;

//Konstruktoren &amp; Destruktor
dcomplex::dcomplex(){
	cout &lt;&lt; &quot;\nObjekt erzeugt.\n&quot;;
}
dcomplex::~dcomplex(){
	cout &lt;&lt; &quot;\nObjekt entfernt.\n&quot;;
}
dcomplex::dcomplex(double x){
	re = 0;
	im = x;
	cout &lt;&lt; &quot;\nObjekt erzeugt.\n&quot;;
}
dcomplex::dcomplex(double x, double y){
	re = x;
	im = y;
	cout &lt;&lt; &quot;\nObjekt erzeugt.\n&quot;;
}

//Ueberladene Operatoren
dcomplex dcomplex::operator + (dcomplex c){
	return dcomplex(re + c.re, im + c.im);
}
dcomplex dcomplex::operator * (dcomplex c){
	return dcomplex(re*c.re - im*c.im, re*c.im + im*c.re);
}
ostream&amp; operator &lt;&lt; (ostream &amp;os, const dcomplex &amp;c){
	if(c.im &gt;=0)
		os &lt;&lt; c.re &lt;&lt; &quot; + j&quot; &lt;&lt; c.im &lt;&lt; endl;
	else
		os &lt;&lt; c.re &lt;&lt; &quot; - j&quot; &lt;&lt; -c.im &lt;&lt; endl;
	return os;
}
istream&amp; operator &gt;&gt; (istream &amp;is, dcomplex &amp;c){
	char z;
	is &gt;&gt; c.re &gt;&gt; z &gt;&gt; c.im;
	return is;
}

//Komponentenfunktionen
void dcomplex::disp(){
	if(im &gt;=0)
		cout &lt;&lt; re &lt;&lt; &quot; + j&quot; &lt;&lt; im;
	else
		cout &lt;&lt; re &lt;&lt; &quot; - j&quot; &lt;&lt; -im;
}
void dcomplex::set(double x, double y){
	re = x;
	im = y;
}
double dcomplex::r(){ return re; }
double dcomplex::i(){ return im; }
double dcomplex::betrag(){
	return sqrt(re*re+im*im);
}
double dcomplex::winkel(){
	return atan(im/re);
}
dcomplex dcomplex::konj(){
	return dcomplex(re,-im);
}
dcomplex dcomplex::kehr(){
	dcomplex c;
	c.re = re/(re*re-im*im);
	c.im = -im/(re*re-im*im);
	return c;
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;dcomplex.h&quot;

using namespace std;

int main(){
	cout &lt;&lt; &quot;Eigene Klasse - dcomplex\n\n&quot;;
	dcomplex a;
	dcomplex b;
	dcomplex c;
	cout &lt;&lt; &quot;Bitte geben Sie Werte fuer Variable a ein (Format: \&quot;re,im\&quot;): &quot;;
	cin &gt;&gt; a;
	cout &lt;&lt; &quot;Bitte geben Sie Werte fuer Variable b ein (Format: \&quot;re,im\&quot;): &quot;;
	cin &gt;&gt; b;
	cout &lt;&lt; &quot;Ausgabe von a: &quot; &lt;&lt; a;
	cout &lt;&lt; &quot;Ausgabe von b: &quot;;
	b.disp();
	cout &lt;&lt; &quot;\nBetrag von a: &quot; &lt;&lt; a.betrag();
	cout &lt;&lt; &quot;\nWinkel von b: &quot; &lt;&lt; b.winkel();
	cout &lt;&lt; &quot;\nDas konjugiert Komplexe von a: &quot;
		 &lt;&lt; a.konj();
	cout &lt;&lt; &quot;\nKehrwert von b: &quot;
		 &lt;&lt; b.kehr();
	cout &lt;&lt; &quot;\nAddition von a und b, speichern in c: &quot;;
	c = a + b;
	cout &lt;&lt; c;
	cout &lt;&lt; &quot;\nMultiplikation von a und b, speichern in c: &quot;;
	c = a * b;
	cout &lt;&lt; c;
	cin.get();
	cin.get();
}
</code></pre>
<p>Was mich nur ein wenig wundert sind die Ausgabe von den Konstruktoren und des Destruktors.<br />
Es wurden laut meinem Programm (da haben wir schon den Fehler ^^) mehr Komponenten entfernt als hinzugefügt.</p>
<p>Eigene Klasse - dcomplex</p>
<p>Objekt erzeugt.</p>
<p>Objekt erzeugt.</p>
<p>Objekt erzeugt.<br />
Bitte geben Sie Werte fuer Variable a ein (Format: &quot;re,im&quot;): 1.1,2.2<br />
Bitte geben Sie Werte fuer Variable b ein (Format: &quot;re,im&quot;): 3.3,4.4<br />
Ausgabe von a: 1.1 + j2.2<br />
Ausgabe von b: 3.3 + j4.4<br />
Betrag von a: 2.45967<br />
Winkel von b: 0.927295<br />
Objekt erzeugt.</p>
<p>Das konjugiert Komplexe von a: 1.1 - j2.2</p>
<p>Objekt entfernt.</p>
<p>Objekt erzeugt.</p>
<p>Objekt entfernt.</p>
<p>Kehrwert von b: -0.38961 + j0.519481</p>
<p>Objekt entfernt.</p>
<p>Addition von a und b, speichern in c:<br />
Objekt erzeugt.</p>
<p>Objekt entfernt.</p>
<p>Objekt entfernt.<br />
4.4 + j6.6</p>
<p>Multiplikation von a und b, speichern in c:<br />
Objekt erzeugt.</p>
<p>Objekt entfernt.</p>
<p>Objekt entfernt.<br />
-6.05 + j12.1</p>
<p>Objekt entfernt.</p>
<p>Objekt entfernt.</p>
<p>Objekt entfernt.</p>
<p>Danke für eure Antworten und vorallem eure Zeit!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576167</guid><dc:creator><![CDATA[ntfs2008]]></dc:creator><pubDate>Wed, 03 Sep 2008 22:09:02 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 22:24:27 GMT]]></title><description><![CDATA[<p>Also mir persönlich gefällt da nicht, dass du andauernd Zeugs ausgibst. Das gehört überhaupt nicht in eine Complex Klasse. <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="😉"
    /><br />
Das gehört irgendwo aussen hin. Wenn du nämlich jetzt diese Klasse irgendwo anwenden willst, musst du den ganzen Code anpassen, was nicht der Sinn ist. <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>
<p>Dann könntest du noch die + und - Operatoren eher ausserhalb der Klasse deklarieren/definieren. Die gehören ja nicht direkt zu einem Objekt.</p>
<p>Das using namespace schreibe NIEMALS in einen Header. Der Header wird sehr wahrscheinlich von jemanden included und dann hat der einen Haufen Namenskonflikte und weiss nicht woher. <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>
<p>Du kannst dafür den Auflösungsoperator :: benutzen. Also z.B so:</p>
<pre><code class="language-cpp">std::ostream
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1576180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576180</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 03 Sep 2008 22:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 22:50:15 GMT]]></title><description><![CDATA[<p>Ich würde die Memberfunktionen <code>r()</code> und <code>i()</code> aussagekräftig umbenennen (z.B. <code>get_real()</code> oder <code>GetReal()</code> ). Wenn diese Methoden eh nur Lesezugriff bieten, kannst du sie als <code>const</code> deklarieren. Es bräuchte auch noch ein Gegenstück, also so etwas wie <code>set_real()</code> , weil man ja eventuell nur einen Teil neu setzen will.</p>
<p>Was die Logging-Ausgaben betrifft: Notfalls kannst du sie auch in der Klasse belassen und bedingt kompilieren. Wenn ein bestimmtes Makro definiert wurde, werden Ausgaben getätigt, sonst nicht. Das ist sehr praktisch für Debug-Ausgaben und wird normalerweise problemlos weggelassen.</p>
<pre><code class="language-cpp">#ifdef DCOMPLEX_LOG
std::cout &lt;&lt; &quot;Objekt erzeugt.&quot; &lt;&lt; std::endl;
#endif
</code></pre>
<p>In der Hauptdatei könnte z.B. stehen:</p>
<pre><code class="language-cpp">#define DCOMPLEX_LOG
#include &quot;dcomplex.h&quot;
</code></pre>
<p>Das einzige Problem ist vielleicht der Platz (3 Zeilen für eine Ausgabe). Das könnte man mit einem weiteren Makro lösen ;):</p>
<pre><code class="language-cpp">#ifdef DCOMPLEX_LOG
 #define LOG_OUTPUT(a) std::cout &lt;&lt; a &lt;&lt; std::endl // Logging-Ausgabe
#else
 #define LOG_OUTPUT(a) (void)0    // ansonsten macht das Makro nichts
#endif
</code></pre>
<p>Angewandt:</p>
<pre><code class="language-cpp">LOG_OUTPUT(&quot;Objekt erzeugt.&quot;);
</code></pre>
<p>Wie du siehst, sind solche Makros ziemlich praktisch. Sieh jedoch davon ab, sie zu häufig zu verwenden, sie haben nämlich beträchtliche Nachteile. Aber für Debug-Loggingausgaben sind sie meiner Ansicht nach durchaus legitim.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576184</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 03 Sep 2008 22:50:15 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 22:55:42 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie du siehst, sind solche Makros ziemlich praktisch. Sieh jedoch davon ab, sie zu häufig zu verwenden, sie haben nämlich beträchtliche Nachteile. Aber für Debug-Loggingausgaben sind sie meiner Ansicht nach durchaus legitim.</p>
</blockquote>
<p>Phu..<br />
Ich würde da eher, wenn schon eine statische Logger Klasse schreiben, wo man den outputstream angeben kann. Dort kann man die Ausgabemenge auch noch mit Makros steuern, wenn man mag. Aber so direkt mit Makros rumfrickeln, würde ich abraten.</p>
<p>Mal abgesehen von Tracing ist das aber ja eigentlich nicht nötig und gehört ansonsten auch nicht in die Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576186</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 03 Sep 2008 22:55:42 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 23:38:11 GMT]]></title><description><![CDATA[<p>Das mit dem Logging is ja nur um mal zu sehen, dass er da nen Konstruktor aufruft. Is ne feine Sache mit den Markos, muss ich mir mal genauer angucken.<br />
Jedoch verstehe ich nicht warum häufiger ein Objekt der Klasse vernichtet als erzeugt wird. Das is doch unlogisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576189</guid><dc:creator><![CDATA[ntfs2008]]></dc:creator><pubDate>Wed, 03 Sep 2008 23:38:11 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 23:39:24 GMT]]></title><description><![CDATA[<p>ntfs2008 schrieb:</p>
<blockquote>
<p>Jedoch verstehe ich nicht warum häufiger ein Objekt der Klasse vernichtet als erzeugt wird. Das is doch unlogisch.</p>
</blockquote>
<p>Du hast Kopierkonstruktor-Aufrufe auch nicht ins Logging miteinbezogen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576190</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 03 Sep 2008 23:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 23:45:58 GMT]]></title><description><![CDATA[<p>Ach leck mich fett! Da war ja was!<br />
Wenn ich also noch hinzufüge:</p>
<pre><code class="language-cpp">dcomplex(const dcomplex &amp;c){
cout &lt;&lt; &quot;Objekt erzeugt.\n&quot;;}
</code></pre>
<p>reicht das dann? oder muss ich im kopierkonstruktor noch definieren wie er zu kopieren hat?<br />
Muss eigentlich das c noch mit rein? (von dcomplex(const dcomplex &amp;<strong>c</strong>){..)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576191</guid><dc:creator><![CDATA[ntfs2008]]></dc:creator><pubDate>Wed, 03 Sep 2008 23:45:58 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 23:52:26 GMT]]></title><description><![CDATA[<p>habs gerade mal getestet.<br />
es funktioniert, vielen dank darauf wäre ich im leben nicht gekommen.<br />
übrigends das c kann man weglassen, aber das wusstet ihr bestimmt eh <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="😉"
    /><br />
und kopieren kann er auch alleine. ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576192</guid><dc:creator><![CDATA[ntfs2008]]></dc:creator><pubDate>Wed, 03 Sep 2008 23:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Wed, 03 Sep 2008 23:56:23 GMT]]></title><description><![CDATA[<p>Nein. Du musst die Member manuell kopieren, wenn du den Kopierkonstruktor selber implementierst. Genau so wie du bei der Definition einen Bezeichner für den Parameter angeben musst (wie in jeder Funktion).</p>
<p>Deklaration in der Klasse:</p>
<pre><code class="language-cpp">dcomplex(const dcomplex&amp; other); // oder
dcomplex(const dcomplex&amp;); // würde ich aber generell nicht empfehlen
</code></pre>
<p>Definition ausserhalb:</p>
<pre><code class="language-cpp">dcomplex::dcomplex(const dcomplex&amp; other)
: re(other.re)
, im(other.im)
{
   std::cout &lt;&lt; &quot;Objekt erzeugt.\n&quot;;
}
</code></pre>
<p>Gewöhn dir am besten gleich an, immer <code>std::</code> vor die Bezeichner der Standardbibliothek zu schreiben, dann kriegst du damit keine Probleme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576193</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 03 Sep 2008 23:56:23 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 00:14:47 GMT]]></title><description><![CDATA[<p>ohja stimmt, ich habe ganz andere werte erhalten.<br />
da hatte er wohl noch irgendwelche werte aus dem speicher genommen.<br />
leider ohne zu meckern. gut das du es gemacht hast ;-P<br />
okay ab jezt wird immer std:: davor geschrieben.<br />
außer im hauptprogramm. da nehme ich ja eh nur die std`s</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576196</guid><dc:creator><![CDATA[ntfs2008]]></dc:creator><pubDate>Thu, 04 Sep 2008 00:14:47 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 00:23:18 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">dcomplex::dcomplex(double x){
    re = 0;
    im = x; // &lt;-- WTF???
    cout &lt;&lt; &quot;\nObjekt erzeugt.\n&quot;;
}
</code></pre>
<p>EDIT:</p>
<blockquote>
<p>Genau so wie du bei der Definition einen Bezeichner für den Parameter angeben musst (wie in jeder Funktion).</p>
</blockquote>
<p>Nö, nur wenn man den/die Parameter auch verwenden will:</p>
<pre><code class="language-cpp">int Func(boost::type&lt;int&gt;)
{
    return 1;
}
double Func(boost::type&lt;double&gt;)
{
    return 0.1;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1576199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576199</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 04 Sep 2008 00:23:18 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 00:33:53 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<pre><code class="language-cpp">dcomplex::dcomplex(double x){
    re = 0;
    im = x; // &lt;-- WTF???
    cout &lt;&lt; &quot;\nObjekt erzeugt.\n&quot;;
}
</code></pre>
</blockquote>
<p>was stimmt daran nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576200</guid><dc:creator><![CDATA[ntfs2008]]></dc:creator><pubDate>Thu, 04 Sep 2008 00:33:53 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 10:44:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ntfs2008 schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<pre><code class="language-cpp">dcomplex::dcomplex(double x){
    re = 0;
    im = x; // &lt;-- WTF???
    cout &lt;&lt; &quot;\nObjekt erzeugt.\n&quot;;
}
</code></pre>
</blockquote>
<p>was stimmt daran nicht?</p>
</blockquote>
<p>passt schon...</p>
<p>MfG,</p>
<p>Probe-Nutzer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576364</guid><dc:creator><![CDATA[Probe-Nutzer]]></dc:creator><pubDate>Thu, 04 Sep 2008 10:44:51 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 11:16:55 GMT]]></title><description><![CDATA[<p>Probe-Nutzer schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>ntfs2008 schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<pre><code class="language-cpp">dcomplex::dcomplex(double x){
    re = 0;
    im = x; // &lt;-- WTF???
    cout &lt;&lt; &quot;\nObjekt erzeugt.\n&quot;;
}
</code></pre>
</blockquote>
<p>was stimmt daran nicht?</p>
</blockquote>
<p>passt schon...</p>
</blockquote>
<p>Nö! Woher soll der Anwender denn wissen, dass er den imaginärteil angibt, wenn er nur ein Parameter angibt? Dann mach wenigstens</p>
<pre><code class="language-cpp">dcomplex::dcomplex (const double &amp;_im)
: re (0), im (_im)
{}
</code></pre>
<p>Wobei ich diesen CTor einfach weglassen würde...</p>
<p>Übrigens würde ich davon abraten, die Variablenbez. in Headern wegzulassen, nur weil man nicht gezwungen wird, sie da hinzuschreiben... Im Header kann man viel schneller nachsehen, was für Variablen erwartet werden...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576380</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 11:34:41 GMT]]></title><description><![CDATA[<p>Ich würde Parameterbezeichner grundsätzlich immer angeben, auch bei der Deklaration. Es ist dann einfach übersichtlicher, und man weiss, was für Argumente übergeben werden müssen, und nicht nur, von welchem Typ sie sein müssen.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<blockquote>
<p>Genau so wie du bei der Definition einen Bezeichner für den Parameter angeben musst (wie in jeder Funktion).</p>
</blockquote>
<p>Nö, nur wenn man den/die Parameter auch verwenden will</p>
</blockquote>
<p>Danke für die Berichtigung. Aber es wird sowieso in 99% der Fälle so sein, dass man die Argumente innerhalb der Funktion benötigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576404</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:34:41 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 11:46:53 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Probe-Nutzer schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>ntfs2008 schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<pre><code class="language-cpp">dcomplex::dcomplex(double x){
    re = 0;
    im = x; // &lt;-- WTF???
    cout &lt;&lt; &quot;\nObjekt erzeugt.\n&quot;;
}
</code></pre>
</blockquote>
<p>was stimmt daran nicht?</p>
</blockquote>
<p>passt schon...</p>
</blockquote>
<p>Nö! Woher soll der Anwender denn wissen, dass er den imaginärteil angibt, wenn er nur ein Parameter angibt?</p>
</blockquote>
<p>Hi also wenn man nur eine Zahl angibt dann ist es doch wohl klar das dies nur der imaginäre Teil ist. Wenns andersrum wäre dann bräuchte ich doch wohl kaum komplexe Zahlen. Es würden dann ja einfache reelle reichen.</p>
<p>[quote=&quot;unskilled&quot;]</p>
<p>Probe-Nutzer schrieb:</p>
<blockquote>
<p>Dann mach wenigstens</p>
<pre><code class="language-cpp">dcomplex::dcomplex (const double &amp;_im)
: re (0), im (_im)
{}
</code></pre>
<p>Wobei ich diesen CTor einfach weglassen würde...</p>
</blockquote>
<p>Was macht der obrige Code? Da kann ich absolut nichts mit anfangen.<br />
Zudem: Was ist ein CTOR? Konstruktor oder wie?</p>
<p>[quote=&quot;unskilled&quot;]</p>
<p>Probe-Nutzer schrieb:</p>
<blockquote>
<p>Übrigens würde ich davon abraten, die Variablenbez. in Headern wegzulassen, nur weil man nicht gezwungen wird, sie da hinzuschreiben... Im Header kann man viel schneller nachsehen, was für Variablen erwartet werden...</p>
<p>bb</p>
</blockquote>
<p>Klingt absolut logisch! Wird ab jetzt beherzigt! Danke<br />
Gruß Timo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576422</guid><dc:creator><![CDATA[ntfs2008]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:46:53 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 11:56:53 GMT]]></title><description><![CDATA[<p>ntfs2008 schrieb:</p>
<blockquote>
<p>...<br />
Hi also wenn man nur eine Zahl angibt dann ist es doch wohl klar das dies nur der imaginäre Teil ist....</p>
</blockquote>
<p>Also mir begegnet dieser Schluss zum ersten Mal.<br />
Da habe ich sogar den gegenteiligen Schluss (&quot;Wenn nur ein Argument, dann ist doch klar, dass es nur der Realteil ist!&quot;) sowohl öfter begegnet als auch ein wenig schlüssiger (was nicht bedeuten soll, dass ich das so machen würde!).</p>
<p>Was würdest Du denn erwarten bei:</p>
<pre><code class="language-cpp">double real = 1.2;
   dcomplex compl;

   compl = real;
</code></pre>
<p>Würdest Du da auch erwarten, dass compl rein imaginär wäre ?<br />
OK, den operator=(double) musst Du nicht (so) implementieren, aber semantisch ist er seeeehr nah am Ctor(double), z.B: in:</p>
<pre><code class="language-cpp">void do_with_complex(dcomplex d);

int main() {
   double real = 1.2;
   do_with_complex(real);
...
</code></pre>
<p>unskilled schrieb:</p>
<blockquote>
<p>Probe-Nutzer schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>ntfs2008 schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<pre><code class="language-cpp">dcomplex::dcomplex(double x){
    re = 0;
    im = x; // &lt;-- WTF???
    cout &lt;&lt; &quot;\nObjekt erzeugt.\n&quot;;
}
</code></pre>
</blockquote>
<p>was stimmt daran nicht?</p>
</blockquote>
<p>passt schon...</p>
</blockquote>
<p>Nö! Woher soll der Anwender denn wissen, dass er den imaginärteil angibt, wenn er nur ein Parameter angibt? ...</p>
</blockquote>
<p>sowas macht z.B. folgendermaßen Probleme:</p>
<pre><code class="language-cpp">dcomplex a1(1,2), a2(3.4), a3(5,6);
</code></pre>
<p>Na ? War das wirklich das, was der Programmierer wollte ?<br />
Insgesamt muss man sehr vorsichtig sein mit solchen &quot;Konvertierungstoren&quot; (Ctor wenigstens &quot;explicit&quot; machen)...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576423</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:56:53 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 12:09:35 GMT]]></title><description><![CDATA[<p>Wenn man die Parameterbezeichner richtig benennt (und &quot;x&quot; ist meines Erachtens kein aussagekräftiger Bezeichner), kann man auch folgendes tun:</p>
<pre><code class="language-cpp">dcomplex::dcomplex(double real = 0, double imag = 0)
: re(real)
, im(imag)
{
}
</code></pre>
<p>Dann hat man auch gleich für einen Default-Ctor gesorgt. Den Zuweisungsoperator müsste man in diesem Fall angleichen, um die gleiche Semantik für 1 Argument zu erzielen.</p>
<p>Es ist wohl naheliegender, den Realteil zu spezifizieren, wenn man nur ein Argument übergibt.</p>
<pre><code class="language-cpp">dcomplex c = 4; // rechts steht der Wert 4, wieso sollte
                // links danach nicht auch den selben Wert haben?
</code></pre>
<p>Oder, um ganz sicher zu sein, kann man es wie Simon2 machen: Konstruktor explizit und ohne Defaultparameter (man muss so auch ausdrücklich angeben, dass der Imaginärteil 0 ist, wenn man eine rein reelle komplexe Zahl will).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576452</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 04 Sep 2008 12:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 12:18:57 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>...<br />
Es ist wohl naheliegender, den Realteil zu spezifizieren, wenn man nur ein Argument übergibt...</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="😃"
    /></p>
<p>@ntfs: siehste ? :p <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>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576462</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 04 Sep 2008 12:18:57 GMT</pubDate></item><item><title><![CDATA[Reply to Konstrukter Problem? on Thu, 04 Sep 2008 12:24:23 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Nö! Woher soll der Anwender denn wissen, dass er den imaginärteil angibt, wenn er nur ein Parameter angibt?</p>
</blockquote>
<p>Und woher soll <em>ntfs2008</em> wissen, dass das gemeint ist?</p>
<p><em>ntfs2008</em> hatte eventuell andere Bedenken, als er sich wunderte, warum der Kommentar da steht.</p>
<p>Da, wo der Kommentar steht, gilt also &quot;passt schon&quot;, nichts anderes war gemeint, wenn auch noch mehr dazu zu sagen gewesen wäre:</p>
<p>Passendere Anmerkung wäre also gewesen: warum nur ein solcher Konstruktor, warum dann nicht auch einer, der nur den Realteil initialisiert, warum überhaupt dieser Konstruktor, oder...</p>
<p>Ich dachte mir auch, dass dies der Grund ist, aber dann bitte doch explizit und nicht implizit, so hilft das auch nicht so versierten Leuten.</p>
<p>MfG,</p>
<p>Probe-Nutzer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576468</guid><dc:creator><![CDATA[Probe-Nutzer]]></dc:creator><pubDate>Thu, 04 Sep 2008 12:24:23 GMT</pubDate></item></channel></rss>