<?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[Werte zurückgeben]]></title><description><![CDATA[<p>Hallo NG,</p>
<p>ich habe in einem Design Pattern Brücke Werte, die ich zurückgeben muss. Und das bereitet mir gerade Probleme. Ich mach mal ein hoffentlich ausreichend ausführliches, aber trotzdem knappes Beispiel.</p>
<p>Hier ist die abstrakte Implementierung für die Repräsentation verschiedener Sachen. Um die Werte VALUE_1 bis VALUE_N geht es hier. Die muß ich zurückgeben.</p>
<pre><code class="language-cpp">class Implementierer{
public:
    Implementierer();

    virtual ~Implementierer();

    virtual int func1Imp() = 0;
    virtual int funcNImp() = 0;

protected:
    static const int VALUE_1  = 0;
...
    static const int VALUE_N  = 9586496;

};
</code></pre>
<p>Hier ist eine abstrakte Klasse, die dazu dient um verschiedene Dinge abzuleiten.</p>
<pre><code class="language-cpp">#include &quot;implementierer.h&quot;

class Abstraktion{
public:
    Abstraktion();

    virtual ~Abstraktion();
    virtual int func1() = 0;
...
    virtual int funcN() = 0;
protected:
  Implementierer *imp;
};
</code></pre>
<p>Hier ist eine von Abstraktion abgeleitete Klasse die eine von vielen möglichen Dingen repäsentiert. Je nachdem, werden die Methoden andere Implementierung haben.</p>
<pre><code class="language-cpp">#include &quot;abstraktion.h&quot;

class SpezielleAbstraktion : public Abstraktion{
public:
    SpezielleAbstraktion();

    virtual ~SpezielleAbstraktion();
    virtual int func1();
...
    virtual int funcN();
};
</code></pre>
<p>Hier ist die konkrete Implementierung für eine bestimmte Sache.</p>
<pre><code class="language-cpp">#include &quot;implementierer.h&quot;

class KonkreteImplementierer : public Implementierer{
public:
    KonkreteImplementierer();

    virtual ~KonkreteImplementierer();
    virtual int func1();
...
    virtual int funcN();
};
</code></pre>
<p>Hier ist eine beispielhafte Implementierung.</p>
<pre><code class="language-cpp">#include &quot;konkreteimplementierer.h&quot;

KonkreteImplementierer::KonkreteImplementierer() : Implementierer(){
}

KonkreteImplementierer::~KonkreteImplementierer(){
}

int KonkreteImplementierer::func1Imp(){
  return VALUE_17;
}

int KonkreteImplementierer::funcNImp(){
  return VALUE_43;
}
</code></pre>
<p>Hier ist eine SpezielleAbstraktion. Sie erzeugt sich die benötigte Implementierung und das wars.</p>
<pre><code class="language-cpp">#include &quot;spezielleabstraktion.h&quot;

SpezielleAbstraktion::SpezielleAbstraktion(){
  imp = new KonkreteImplementierer();
}

SpezielleAbstraktion::~SpezielleAbstraktion(){
  delete imp;
}

int SpezielleAbstraktion::func1(){
    return imp-&gt;func1Imp();
}

int SpezielleAbstraktion::funcN(){
  return imp-&gt;funcNImp();
}
</code></pre>
<p>Ich möchte nun in der main Funktion wissen, welchen Wert mit meine SpezielleAbstraktion zurück gegeben hat.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;spezielleabstraktion.h&quot;

using namespace std;

int main(int argc, char *argv[]){

  SpezielleAbstraktion spAb = new SpezielleAbstraktion();

  switch(sbAb-&gt;func1()){
  case VALUE_17:
    cout &lt;&lt; &quot;Bim&quot; &lt;&lt; endl;
    break;
  case VALUE_43:
    cout &lt;&lt; &quot;Bam&quot; &lt;&lt; endl;
    break;
  default:
    cerr &lt;&lt; &quot;Falscher Wert&quot; &lt;&lt; endl;
  }
 return 0;
}
</code></pre>
<p>Aber der Compiler meint er kennt die Werte VALUE_X nicht. Egal ob sie public sind oder nicht.<br />
Dabei müßten sie durch die includiererrei sichtbar sein, den das File in dem main steht, includiert SpezielleAbstraktion.<br />
SpezielleAbstraktion includiert Abstraktion,<br />
Abstraktion includiert Implementierer und dadrin stehen die Werte.<br />
Es hat auch keine Rolle gespielt, wie ich auf die VALUE_X zugegriffen habe. Also z.B. folgendes ging auch nicht.</p>
<pre><code class="language-cpp">switch(sbAb-&gt;func1()){
  case sbAb-&gt;VALUE_17: // Ging nicht
    cout &lt;&lt; &quot;Bim&quot; &lt;&lt; endl;
    break;
  case Implementierer::VALUE_43: // Ging auch nicht
    cout &lt;&lt; &quot;Bam&quot; &lt;&lt; endl;
    break;
  default:
    cerr &lt;&lt; &quot;Falscher Wert&quot; &lt;&lt; endl;
  }
</code></pre>
<p>Wie kann ich in main auf die VALUE_X zugreifen?</p>
<p>Gruß,<br />
M. Incani</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204731/werte-zurückgeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 18:51:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204731.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Feb 2008 14:59:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Werte zurückgeben on Wed, 06 Feb 2008 15:47:00 GMT]]></title><description><![CDATA[<p>Hallo NG,</p>
<p>ich habe in einem Design Pattern Brücke Werte, die ich zurückgeben muss. Und das bereitet mir gerade Probleme. Ich mach mal ein hoffentlich ausreichend ausführliches, aber trotzdem knappes Beispiel.</p>
<p>Hier ist die abstrakte Implementierung für die Repräsentation verschiedener Sachen. Um die Werte VALUE_1 bis VALUE_N geht es hier. Die muß ich zurückgeben.</p>
<pre><code class="language-cpp">class Implementierer{
public:
    Implementierer();

    virtual ~Implementierer();

    virtual int func1Imp() = 0;
    virtual int funcNImp() = 0;

protected:
    static const int VALUE_1  = 0;
...
    static const int VALUE_N  = 9586496;

};
</code></pre>
<p>Hier ist eine abstrakte Klasse, die dazu dient um verschiedene Dinge abzuleiten.</p>
<pre><code class="language-cpp">#include &quot;implementierer.h&quot;

class Abstraktion{
public:
    Abstraktion();

    virtual ~Abstraktion();
    virtual int func1() = 0;
...
    virtual int funcN() = 0;
protected:
  Implementierer *imp;
};
</code></pre>
<p>Hier ist eine von Abstraktion abgeleitete Klasse die eine von vielen möglichen Dingen repäsentiert. Je nachdem, werden die Methoden andere Implementierung haben.</p>
<pre><code class="language-cpp">#include &quot;abstraktion.h&quot;

class SpezielleAbstraktion : public Abstraktion{
public:
    SpezielleAbstraktion();

    virtual ~SpezielleAbstraktion();
    virtual int func1();
...
    virtual int funcN();
};
</code></pre>
<p>Hier ist die konkrete Implementierung für eine bestimmte Sache.</p>
<pre><code class="language-cpp">#include &quot;implementierer.h&quot;

class KonkreteImplementierer : public Implementierer{
public:
    KonkreteImplementierer();

    virtual ~KonkreteImplementierer();
    virtual int func1();
...
    virtual int funcN();
};
</code></pre>
<p>Hier ist eine beispielhafte Implementierung.</p>
<pre><code class="language-cpp">#include &quot;konkreteimplementierer.h&quot;

KonkreteImplementierer::KonkreteImplementierer() : Implementierer(){
}

KonkreteImplementierer::~KonkreteImplementierer(){
}

int KonkreteImplementierer::func1Imp(){
  return VALUE_17;
}

int KonkreteImplementierer::funcNImp(){
  return VALUE_43;
}
</code></pre>
<p>Hier ist eine SpezielleAbstraktion. Sie erzeugt sich die benötigte Implementierung und das wars.</p>
<pre><code class="language-cpp">#include &quot;spezielleabstraktion.h&quot;

SpezielleAbstraktion::SpezielleAbstraktion(){
  imp = new KonkreteImplementierer();
}

SpezielleAbstraktion::~SpezielleAbstraktion(){
  delete imp;
}

int SpezielleAbstraktion::func1(){
    return imp-&gt;func1Imp();
}

int SpezielleAbstraktion::funcN(){
  return imp-&gt;funcNImp();
}
</code></pre>
<p>Ich möchte nun in der main Funktion wissen, welchen Wert mit meine SpezielleAbstraktion zurück gegeben hat.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;spezielleabstraktion.h&quot;

using namespace std;

int main(int argc, char *argv[]){

  SpezielleAbstraktion spAb = new SpezielleAbstraktion();

  switch(sbAb-&gt;func1()){
  case VALUE_17:
    cout &lt;&lt; &quot;Bim&quot; &lt;&lt; endl;
    break;
  case VALUE_43:
    cout &lt;&lt; &quot;Bam&quot; &lt;&lt; endl;
    break;
  default:
    cerr &lt;&lt; &quot;Falscher Wert&quot; &lt;&lt; endl;
  }
 return 0;
}
</code></pre>
<p>Aber der Compiler meint er kennt die Werte VALUE_X nicht. Egal ob sie public sind oder nicht.<br />
Dabei müßten sie durch die includiererrei sichtbar sein, den das File in dem main steht, includiert SpezielleAbstraktion.<br />
SpezielleAbstraktion includiert Abstraktion,<br />
Abstraktion includiert Implementierer und dadrin stehen die Werte.<br />
Es hat auch keine Rolle gespielt, wie ich auf die VALUE_X zugegriffen habe. Also z.B. folgendes ging auch nicht.</p>
<pre><code class="language-cpp">switch(sbAb-&gt;func1()){
  case sbAb-&gt;VALUE_17: // Ging nicht
    cout &lt;&lt; &quot;Bim&quot; &lt;&lt; endl;
    break;
  case Implementierer::VALUE_43: // Ging auch nicht
    cout &lt;&lt; &quot;Bam&quot; &lt;&lt; endl;
    break;
  default:
    cerr &lt;&lt; &quot;Falscher Wert&quot; &lt;&lt; endl;
  }
</code></pre>
<p>Wie kann ich in main auf die VALUE_X zugreifen?</p>
<p>Gruß,<br />
M. Incani</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450620</guid><dc:creator><![CDATA[BlackPepper]]></dc:creator><pubDate>Wed, 06 Feb 2008 15:47:00 GMT</pubDate></item><item><title><![CDATA[Reply to Werte zurückgeben on Wed, 06 Feb 2008 17:36:12 GMT]]></title><description><![CDATA[<p>Lange Frage, kurze Antwort: Mit Implementierer::VALUE_X. Damit man von außen darauf zugreifen kann, müssen die Konstanten natürlich public sein!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450731</guid><dc:creator><![CDATA[deha]]></dc:creator><pubDate>Wed, 06 Feb 2008 17:36:12 GMT</pubDate></item></channel></rss>