<?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[abstakte Klasse, konstruktor, Destruktor]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem mit den Konstruktoren und Destruktoren.</p>
<p>Ich habe 1. eine abstrakte Klasse &quot;AbstractFilter&quot;<br />
Diese enhält eine virtuelle methoden. einen Konstruktor und einen virtual destruktor</p>
<p>2. eine Klasse &quot;HistogramFilter&quot;<br />
Diese erbt von &quot;AbstractFilter&quot; und beinhaltet wieder diese virtuelle methode und ein paar weiter normale methoden. und einen Konstruktor und virtual destruktor</p>
<p>3. eine Klasse &quot;HistogramR&quot;<br />
Diese erbt von &quot;HistogramFilter&quot; hier wird lediglich die virtuelle Methode implementiert. ich habe hier auch einen konstruktor und virtual destruktor.</p>
<p>Beim lInken kommt jetzt allerdings ein Problem.<br />
z.B<br />
in HistogramFiler::HistogramFilter() &quot;undefined reference to 'vtable HistogramFilter&quot;<br />
in HistogramR::~HistogramR() &quot;undefined Reference to HistogramFilter::~HistogramFilter.</p>
<p>ich habe auch schon versucht. die kontruktoren jeweils mit einem doppelpunkt den vorhergehenden aufzurufen, dies hatte aber die gleichen Fehler zur Folge.<br />
was mache ich hier falsch.</p>
<p>danke für eure antwort.</p>
<p>mfg</p>
<p>Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183894/abstakte-klasse-konstruktor-destruktor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 13:31:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183894.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Jun 2007 09:29:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 09:29:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem mit den Konstruktoren und Destruktoren.</p>
<p>Ich habe 1. eine abstrakte Klasse &quot;AbstractFilter&quot;<br />
Diese enhält eine virtuelle methoden. einen Konstruktor und einen virtual destruktor</p>
<p>2. eine Klasse &quot;HistogramFilter&quot;<br />
Diese erbt von &quot;AbstractFilter&quot; und beinhaltet wieder diese virtuelle methode und ein paar weiter normale methoden. und einen Konstruktor und virtual destruktor</p>
<p>3. eine Klasse &quot;HistogramR&quot;<br />
Diese erbt von &quot;HistogramFilter&quot; hier wird lediglich die virtuelle Methode implementiert. ich habe hier auch einen konstruktor und virtual destruktor.</p>
<p>Beim lInken kommt jetzt allerdings ein Problem.<br />
z.B<br />
in HistogramFiler::HistogramFilter() &quot;undefined reference to 'vtable HistogramFilter&quot;<br />
in HistogramR::~HistogramR() &quot;undefined Reference to HistogramFilter::~HistogramFilter.</p>
<p>ich habe auch schon versucht. die kontruktoren jeweils mit einem doppelpunkt den vorhergehenden aufzurufen, dies hatte aber die gleichen Fehler zur Folge.<br />
was mache ich hier falsch.</p>
<p>danke für eure antwort.</p>
<p>mfg</p>
<p>Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302322</guid><dc:creator><![CDATA[Spitfire85]]></dc:creator><pubDate>Sun, 10 Jun 2007 09:29:21 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 10:57:35 GMT]]></title><description><![CDATA[<p>Also du solltest dir am besten ein Interface IFilter anlegen ... wie du es ja schon in etwa getan hast.</p>
<p>So ... und für den Rest ... zeig 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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302355</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 10 Jun 2007 10:57:35 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 12:13:38 GMT]]></title><description><![CDATA[<p>Spitfire85 schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>ich habe ein Problem mit den Konstruktoren und Destruktoren.</p>
<p>Ich habe 1. eine abstrakte Klasse &quot;AbstractFilter&quot;<br />
Diese enhält eine virtuelle methoden. einen Konstruktor und einen virtual destruktor</p>
</blockquote>
<p>&quot;virtual&quot; alleine reicht ja nicht um die KLasse &quot;abstrakt&quot; zu machen; dazu braucht es ja solche Konstrukte:</p>
<pre><code class="language-cpp">class Foo {
public:
    virtual void bar() = 0; // aka &quot;pure virtual&quot; aka &quot;abstract&quot; 
};
</code></pre>
<p>Es stellt sich also zunächst die Frage welche der von Dir deklarierten Methoden nut &quot;virtual&quot; und welche &quot;pure virtual&quot; sind.</p>
<p>Ein &quot;pure virtual&quot; Destruktor wäre übrigens keine gute Idee; genauso wie der Aufruf von virtuellen Methoden (gleich ob &quot;pure&quot; oder nicht) in Konstruktoren.</p>
<p>Desweiteren: Zeig den Code!</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302390</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sun, 10 Jun 2007 12:13:38 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 12:18:05 GMT]]></title><description><![CDATA[<p>Sorry, ich habe den code leider nicht griffbereit, da er auf linux auf meinem laptop läuft un ich da noch nicht ins internet komme.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15778">@Gast</a>++</p>
<blockquote>
<p>&quot;virtual&quot; alleine reicht ja nicht um die KLasse &quot;abstrakt&quot; zu machen; dazu braucht es ja solche Konstrukte:<br />
C/C++ Code:</p>
<pre><code>class Foo {
public:
    virtual void bar() = 0; // aka &quot;pure virtual&quot; aka &quot;abstract&quot;
};
</code></pre>
</blockquote>
<p>genauso habe ich es doch gemacht.</p>
<p>desweiteren wollte ich noch erwähnen, dass der Fehler beim linken erst auftritt, wenn ich ein objekt der klasse HistogramR instanziiere.<br />
und zwar.</p>
<p>HistogramR neu; //liefert fehler<br />
HistogramR neu(); //liefert keinen fehler<br />
aber: wenn ich dann neu.process() machen will, kommt process is not a method of HistogramR()(). obwohl ich process als methode habe.<br />
Aber das komische sind ja die 2 klammern dahinter()() woran liegt das?</p>
<p>mfg<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302395</guid><dc:creator><![CDATA[Spitfire85]]></dc:creator><pubDate>Sun, 10 Jun 2007 12:18:05 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 12:28:35 GMT]]></title><description><![CDATA[<p>Du musst deinen virtuellen dtor auch irgendwo implementieren, selbst wenn er nix tut.<br />
Wenn eine Basisklasse allerdings bereits einen virtuellen dtor hat brauchst du den virtuellen dtor in der abgeleiteten Klasse nur wenn er &quot;nicht leer&quot; ist, ansonsten lässt du den einfach weg.</p>
<p>Das gilt natürlich für alle virtuellen Funktionen die nicht &quot;pure&quot; sind, die müssen alle implementiert sein, sonst spuckt der Linker Zähne. Wenn sie &quot;pure&quot; sind müssen sie nicht implementiert sein, dürfen aber.</p>
<p>Ausnahme: ein dtor muss *immer* implementiert werden, auch wenn er &quot;pure&quot; ist (wird ja von der abgeleiteten Klasse &quot;direkt&quot; aufgerufen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302401</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 10 Jun 2007 12:28:35 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 12:44:03 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin noch ein ziemlicher anfänger mit c++, könnt ihr vielleicht mal erklären, was genau der unterschied zwischen pure virtual und virtual ist?</p>
<p>@hustbear:<br />
Danke für die erklärung, und wie gilt das ganze für einen konstruktor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302415</guid><dc:creator><![CDATA[Spitfire85]]></dc:creator><pubDate>Sun, 10 Jun 2007 12:44:03 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 12:51:53 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14988">@Spitfire85</a>:<br />
Lös es erstmal mittels Hardware: Netzwerkkabel (crossed) von Laptop zu PC oder Diskette oder IR<br />
Dann File kopieren; Source posten.</p>
<p>@all:<br />
Da sage nochmal einer was gegen <strong>meine</strong> Glaskugel... <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/1302422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302422</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sun, 10 Jun 2007 12:51:53 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 12:58:46 GMT]]></title><description><![CDATA[<p>Spitfire85 schrieb:</p>
<blockquote>
<p>ich bin noch ein ziemlicher anfänger mit c++, könnt ihr vielleicht mal erklären, was genau der unterschied zwischen pure virtual und virtual ist?</p>
</blockquote>
<p>Das müsste eigentlich in deinem C++-Buch/-Tutorial stehen. Wenn nicht, kannst du <a href="http://tutorial.schornboeck.net/virtual.htm" rel="nofollow">hier</a> (und im nächsten Kapitel) nachschauen.</p>
<blockquote>
<p>Danke für die erklärung, und wie gilt das ganze für einen konstruktor?</p>
</blockquote>
<p>Konstruktoren können nicht virtual sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302432</guid><dc:creator><![CDATA[michba]]></dc:creator><pubDate>Sun, 10 Jun 2007 12:58:46 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 13:05:33 GMT]]></title><description><![CDATA[<blockquote>
<p>Ein &quot;pure virtual&quot; Destruktor wäre übrigens keine gute Idee; genauso wie der Aufruf von virtuellen Methoden (gleich ob &quot;pure&quot; oder nicht) in Konstruktoren.</p>
</blockquote>
<p>Ein virtual pure dtor ist überhaupt garkein Problem nicht <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>Ist auch ein ganz anderer Fall als ein Aufruf einer virtuellen Funktion im ctor, denn in einem Fall wo der dtor wirklich &quot;virtual&quot; verwendet wird ist das Objekt immer schon vollständig konstuiert, und der (implizite) Aufruf der Basisklassen dtoren (schönes Wort *g*) wird auch nie &quot;virtual&quot; gemacht.</p>
<p>Ein &quot;pure&quot; dtor macht die Klasse nur abstrakt (wenn sie das nicht schon ist), sonst gibt es keinen mir bekannten Unterschied zwischen einem &quot;virtual&quot; dtor und einem &quot;pure&quot; dtor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302434</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 10 Jun 2007 13:05:33 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 13:07:50 GMT]]></title><description><![CDATA[<p>michba schrieb:</p>
<blockquote>
<p>Konstruktoren können nicht virtual sein.</p>
</blockquote>
<p>&quot;...aber man kann den gewünschten Effekt leicht erzielen&quot; (Bjarne Stroustrup C++PL 4.Auflage §15.6.2).<br />
Ween irgendwo in der englischsprachigen Literatur von &quot;virtual Constructors&quot; die Rede ist dann meint das wahrschinelich jenen Cloning-Mechanismus. (BS a.a.O.)</p>
<p>Allerdings bezweifle ich ich dass der OP diesen Mechanismus wirklich braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302436</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sun, 10 Jun 2007 13:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 13:23:42 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ein &quot;pure&quot; dtor macht die Klasse nur abstrakt (wenn sie das nicht schon ist), sonst gibt es keinen mir bekannten Unterschied zwischen einem &quot;virtual&quot; dtor und einem &quot;pure&quot; dtor.</p>
</blockquote>
<p>Ein &quot;pure&quot; dtor wird wohl nichts aufräumen können, oder? <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 />
Allerdings hab ich sowas auch noch nie ausprobiert; ich sah bisher nie Veranlassung dazu.</p>
<p>Einen &quot;pure virtual dtor&quot; (wenn das überhaupt geht) würde ich zumindest nicht verwenden um die Abstraktheit einer Klasse sicherzustellen. Das würde imo ungünstig delegieren:<br />
&quot;Wenn Du's in der Kindklasse aufgeräumt kriegst darfst Du's auch benutzen&quot; ???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302448</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sun, 10 Jun 2007 13:23:42 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Sun, 10 Jun 2007 20:53:25 GMT]]></title><description><![CDATA[<p>Oh-oh, hier besteht offensichtlich einiges an Verwirrung. Mal sehen ob ich das verständlich machen kann...</p>
<ol>
<li>
<p>&quot;pure&quot; impliziert &quot;virtual&quot;, wenn ich &quot;pure&quot; dtor schreibe meine ich also &quot;virtual pure&quot; dtor.</p>
</li>
<li>
<p>&quot;pure&quot; tut nicht ganz das was die meisten denken. Wenn ich eine Memberfunktion F in einer Klasse B &quot;pure&quot; mache, dann ...<br />
I) ... bedeutet das dass die Klasse B &quot;abstract&quot; wird, also selbst nicht instanzierbar ist, und F erst in einer abgeleiteten Klasse überschrieben werden muss damit die abgeleitete Klasse nichtmehr &quot;abstract&quot; ist.<br />
II) ... bedeutet das dass die Funktion B::F nicht implementiert werden muss.</p>
</li>
</ol>
<p>Es bedeutet aber nicht dass die Funktion B::F nicht implementiert werden kann bzw. darf, und es bedeutet auch nicht dass sie nicht aufgerufen werden kann.<br />
Folgendes ist z.B. völlig OK:</p>
<pre><code class="language-cpp">class B
{
public:
    virtual void F() = 0
    {
        printf(&quot;blubb\n&quot;);
    }

    void Test234()
    {
        this-&gt;B::F();
    }
};

class D : public B
{
public:
    virtual void F()
    {
        this-&gt;B::F();
    }
};
</code></pre>
<p>So. Nu sehen wir uns nochmal den Fall eines virtual pure dtors an.<br />
Zu (I): da jede Klasse einen dtor hat (wenn man selbst keinen schreibt wird ja einer automatisch generiert) ist das &quot;muss überschrieben werden&quot; schonmal für jede abgeleitete Klasse erfüllt. Durch die &quot;virtual bleibt virtual&quot; Regel ist dieser dtor der abgeleiteten Klasse auch wieder virtual, nur so nebenbei.</p>
<p>Zu (II): wenn D von B abgeleitet ist, dann ruft der dtor D::~D implizit B::~B auf. Und zwar nicht per &quot;virtual call&quot;, sondern ala &quot;this-&gt;B::~B()&quot;, also namentlich. Anders gesagt: das &quot;virtual&quot; wird umgangen. Das muss auch so sein, da sonst ja D::~D sich selbst aufrufen würde, was nicht im Sinne des Erfinders wäre.<br />
Ergo: B::~B wird aufgerufen, daher muss B::~B auch irgendwo implementiert sein, sonst wird das Programm nicht linken.<br />
Dass B::~B dabei &quot;pure&quot; deklariert ist macht weiter keinen Unterschied, es funktioniert also alles so wie es funktionieren würde wenn B::~B NICHT &quot;pure&quot; wäre -- eben mit dem einzigen Unterschied dass B &quot;abstract&quot; wird.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">#include &lt;conio.h&gt;
#include &lt;memory&gt;

class B
{
public:
	virtual ~B() = 0
	{
		printf(&quot;B::~B\n&quot;);
	}
	virtual void pure() = 0
	{
		printf(&quot;pure\n&quot;);
	}
};

class D : public B
{
public:
	virtual ~D()
	{
		printf(&quot;D::~D\n&quot;);
	}
	virtual void pure()
	{
		printf(&quot;override-of-pure\n&quot;);
	}
};

int main() 
{
	{
		D test234;
		test234.B::pure();
		test234.pure();
	}
	{
		std::auto_ptr&lt;B&gt; test234(new D);
		test234-&gt;B::pure();
		test234-&gt;pure();
	}
	_getch();
	return 0;
}
</code></pre>
<p>Output:</p>
<pre><code>pure
override-of-pure
D::~D
B::~B
pure
override-of-pure
D::~D
B::~B
</code></pre>
<p>Kurz gesagt: nein, ein &quot;virtual pure dtor&quot; ist überhaupt kein Problem. Kann sogar recht nützlich sein, nämlich wenn man eine Klasse &quot;abstract&quot; machen möchte ohne alle abgeleiteten Klassen zu zwingen irgendeine bestimmte Memberfunktion zu überschreiben.</p>
<p>p.S.: zum Thema 'ein &quot;pure&quot; dtor wird wohl nichts aufräumen können': natürlich kann er das. Eine abstrakte Klasse kann genauso State (=Datenmember) haben der &quot;aufgeräumt&quot; werden muss wie eine normale Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302774</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 10 Jun 2007 20:53:25 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Mon, 11 Jun 2007 08:47:07 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Folgendes ist z.B. völlig OK:</p>
<pre><code class="language-cpp">class B
{
public:
    virtual void F() = 0
    {
        printf(&quot;blubb\n&quot;);
    }

    void Test234()
    {
        this-&gt;B::F();
    }
};
</code></pre>
</blockquote>
<p>Nicht ganz. Eine pure virtual function darf zwar, wie du richtig sagtest, eine Implementation besitzen, diese muss dann aber außerhalb der Klasse stehen:</p>
<pre><code class="language-cpp">class B
{
public:
    virtual void F() = 0;
    void Test234()
    {
        this-&gt;B::F();
    }
};

// irgendwo - am Besten in einer cpp-Datei
void B::F() {
  printf(&quot;blubb\n&quot;);
}
</code></pre>
<p>Die Syntax virtual void foo() = 0 { /* Impl */ } ist kein gültiges C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302935</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Mon, 11 Jun 2007 08:47:07 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Mon, 11 Jun 2007 09:09:32 GMT]]></title><description><![CDATA[<p>Danke für den Hinweis! Ich wusste das nicht und der VC 8 die dumme Gurke frisst es natürlich trotzdem.</p>
<p>Ist aber auch wieder so eine von diesen &quot;vollkommen für nix&quot; Regeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302942</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 11 Jun 2007 09:09:32 GMT</pubDate></item><item><title><![CDATA[Reply to abstakte Klasse, konstruktor, Destruktor on Mon, 11 Jun 2007 12:15:25 GMT]]></title><description><![CDATA[<p>Spitfire85 schrieb:</p>
<blockquote>
<p>...<br />
HistogramR neu; //liefert fehler<br />
HistogramR neu(); //liefert keinen fehler<br />
aber: wenn ich dann neu.process() machen will, kommt process is not a method of HistogramR()(). obwohl ich process als methode habe.<br />
Aber das komische sind ja die 2 klammern dahinter()() woran liegt das?...</p>
</blockquote>
<p>Das liegt daran, dass Du &quot;neu&quot; nicht als &quot;Histogramm&quot;, sondern als &quot;Funktion ohne Parameter und Rückgabewert Histogramm&quot; deklariert hast.<br />
Vergleiche mal:</p>
<pre><code class="language-cpp">int f(int);   // Funktion nimmt int, returniert int
int f();      // Funktion &quot;nimmt void&quot;, returniert int
Histogramm f();   // Funktion &quot;nimmt void&quot;, returniert Histogramm
Histogramm neu();  // ebenso....
</code></pre>
<p>dann wird's vielleicht klarer.<br />
Ist ein beliebter Fehler, weil es bei &quot;dynamischer Allozierung&quot; nicht dazu kommt:</p>
<pre><code class="language-cpp">Histogramm* neu_dynamisch = new Histogramm(); // ist erlaubt und identisch mit &quot;new Histogramm;&quot;

Histogramm neu_Funktion(); // Funktion
Histogramm neu_Var; // Das, was Du urspünglich meintest
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303074</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 11 Jun 2007 12:15:25 GMT</pubDate></item></channel></rss>