<?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[Pointer-Problem mit Basisklasse und Übergabe an Methode]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich bin noch nicht so lange dabei und beschäftige mich gerade mit Pointern. Nun habe ich folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Basisklasse {
  private: int a;
           int b;
  public: Basisklasse();
          void tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2);
};

Basisklasse::Basisklasse() {}

void tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2) {
  // Hier wird was Tolles gemacht
}

int main() {
  int wert1 = 1;
  int wert2 = 2;

  // *** Hier kommt nun das Problem ***
  tuWas(wert1, wert2);
}
</code></pre>
<p>Könnt ihr mir an der im Quelltext markierten Stelle sagen, wo hier mein Denkfehler liegt?</p>
<p>Ich möchte die Werte wert1 und wert2 an die Methode tuWas() übergeben. Allerdings sind in der Methode ja Zeiger auf die Basisklasse als Übergabewerte hinterlegt. Wie kann ich nun die beiden int-Werte an die Methode tuWas() übergeben? Klar, ich könnte schreiben:</p>
<pre><code class="language-cpp">void tuWas(int x, int y) {}
</code></pre>
<p>und die Methode entsprechend anders definieren, aber ich möchte doch schon gerne die Zeiger benutzen.</p>
<p>Ich bekomme dort immer den Fehler &quot;Invalid conversion from 'int' to 'Basisklasse*', was ja im Grunde auch Sinn macht. Allerdings weiß ich nicht, wie ich das anders übergeben soll...</p>
<p>Und sorry für die eventuell noch nicht ganz korrekten Formulierungen... <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="🙂"
    /> Danke im Voraus!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291067/pointer-problem-mit-basisklasse-und-übergabe-an-methode</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 22:26:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291067.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 10 Aug 2011 06:26:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 06:26:16 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich bin noch nicht so lange dabei und beschäftige mich gerade mit Pointern. Nun habe ich folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Basisklasse {
  private: int a;
           int b;
  public: Basisklasse();
          void tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2);
};

Basisklasse::Basisklasse() {}

void tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2) {
  // Hier wird was Tolles gemacht
}

int main() {
  int wert1 = 1;
  int wert2 = 2;

  // *** Hier kommt nun das Problem ***
  tuWas(wert1, wert2);
}
</code></pre>
<p>Könnt ihr mir an der im Quelltext markierten Stelle sagen, wo hier mein Denkfehler liegt?</p>
<p>Ich möchte die Werte wert1 und wert2 an die Methode tuWas() übergeben. Allerdings sind in der Methode ja Zeiger auf die Basisklasse als Übergabewerte hinterlegt. Wie kann ich nun die beiden int-Werte an die Methode tuWas() übergeben? Klar, ich könnte schreiben:</p>
<pre><code class="language-cpp">void tuWas(int x, int y) {}
</code></pre>
<p>und die Methode entsprechend anders definieren, aber ich möchte doch schon gerne die Zeiger benutzen.</p>
<p>Ich bekomme dort immer den Fehler &quot;Invalid conversion from 'int' to 'Basisklasse*', was ja im Grunde auch Sinn macht. Allerdings weiß ich nicht, wie ich das anders übergeben soll...</p>
<p>Und sorry für die eventuell noch nicht ganz korrekten Formulierungen... <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="🙂"
    /> Danke im Voraus!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104224</guid><dc:creator><![CDATA[imac2011]]></dc:creator><pubDate>Wed, 10 Aug 2011 06:26:16 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 07:03:43 GMT]]></title><description><![CDATA[<p>Da spielt das, was du tun möchtest, mal gar keine Rolle. Der Compiler sagt dir, was du tun kannst, und du kannst dem Compiler kein <code>int</code> vorsetzen wenn er <code>Basisklasse*</code> erwartet.<br />
Es gibt zwei Lösungen für dein Problem, entweder du übergibst der Funktion tuwas zwei Zeiger auf <code>BasisObjekt</code> oder du stellst eine Funtkion <code>tuwas( int x, int y )</code> zur Verfügung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104238</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 10 Aug 2011 07:03:43 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 07:06:49 GMT]]></title><description><![CDATA[<blockquote>
<p>aber ich möchte doch schon gerne die Zeiger benutzen.</p>
</blockquote>
<p>Ich würde sagen, das ist der Denkfehler. Überhaupt ist der ganze Sinn hinter Deinem Programm strittig.</p>
<p>Die Methode erwartet zwei Zeiger auf eine <em>Basisklasse</em>. Diese repräsentiert zwei Zahlen. Wenn Du zwei Zahlen hast, macht es logisch erstmal nur Sinn, dass das zu einer einzigen <em>Basisklasse</em> umgebaut wird.</p>
<p>Als nächstes ist tuWas eine Methode einer Klasse, d.h. Du brauchst von der Klasse ein Objekt, an welchem Du die Methode aufrufen kannst. Ich glaube, Du hast die Grundgedanken einer Klasse noch nicht verstanden. Für den Fall: Lies das Kapitel im Buch bitte nochmal nach (oder schmeiß das Buch weg, wenn es von Jürgen Wolf ist). Falls Du tatsächlich eine freie Funktion möchtest, die zufällig so heißt wie die Methode, ist das natürlich etwas anderes, aber für die Leser irritierend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104239</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 10 Aug 2011 07:06:49 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 07:06:30 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>(oder schmeiß das Buch weg, wenn es von Jürgen Wolf ist).</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104240</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 10 Aug 2011 07:06:30 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 07:21:27 GMT]]></title><description><![CDATA[<p>Erstmal danke für die Antworten.</p>
<p>Eisflamme schrieb:</p>
<blockquote>
<p>(oder schmeiß das Buch weg, wenn es von Jürgen Wolf ist).</p>
</blockquote>
<p>Das Buch, das ich benutze, ist von Helmut Erlenkötter <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>Eisflamme schrieb:</p>
<blockquote>
<p>Überhaupt ist der ganze Sinn hinter Deinem Programm strittig.</p>
</blockquote>
<p>Das ist ja auch nur der Teil eines Programms.</p>
<p>Hier der geänderte Quelltext:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Basisklasse {
  private: int a;
           int b;
  public:  int wert1;
           int wert2;
  public: Basisklasse();
          void tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2);
};

Basisklasse::Basisklasse() {
  wert1 = 1;
  wert2 = 2;
}

void Basisklasse::tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2) {
  // Hier wird was Tolles gemacht
}

int main() {

   Basisklasse b;

  // *** Hier kommt nun das Problem ***
  b.tuWas(b.wert1, b.wert2);
}
</code></pre>
<p>Fehler kommt nach wie vor, aber da lese ich erstmal noch mal das Kapitel über Pointer und Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104242</guid><dc:creator><![CDATA[imac2011]]></dc:creator><pubDate>Wed, 10 Aug 2011 07:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 07:29:40 GMT]]></title><description><![CDATA[<p>Ja, b.wert1 ist ja auch ein int und keine Basisklasse. Und Du brauchst da eigentlich auch überhaupt keine Parameter übergeben. Wenn Du von einem Klassenobjekt eine Methode aufrufst, sind in der Methode sämtliche Attribute eben dieser Klasseninstanz bereits bekannt.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class Basisklasse
{
private:
    int a;
    int b; // Attribute sollten in Klassen auch immer private sein, aber gut
public:
    Basisklasse(int a, int b) : a(a), b(b) {}
    void tuWas();
};

void Basisklasse::tuWas()
{
    cout &lt;&lt; &quot;a ist &quot; &lt;&lt; a &lt;&lt; &quot; und b ist &quot; &lt;&lt; b &lt;&lt; &quot;.&quot;;
}

int main()
{
    Basisklasse einObjekt(10, 20);
    einObjekt.tuWas();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2104248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104248</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 10 Aug 2011 07:29:40 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 08:00:33 GMT]]></title><description><![CDATA[<p>Ok, so, wie du es geschrieben hast, leuchtet es mir auch ein und macht ja auch Sinn. Mal kurz zum Hintergrund: Das von mir angesprochene Beispiel ist für eine Programmieraufgabe (natürlich nicht in so einfacher Form, das war nur, damit das Problem klar wird), und da wird gefordert, dass die Pointer genutzt werden (auch wenn es noch so merkwürdig und unlogisch ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104264</guid><dc:creator><![CDATA[imac2011]]></dc:creator><pubDate>Wed, 10 Aug 2011 08:00:33 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 08:09:42 GMT]]></title><description><![CDATA[<p>imac2011 schrieb:</p>
<blockquote>
<p>Ok, so, wie du es geschrieben hast, leuchtet es mir auch ein und macht ja auch Sinn. Mal kurz zum Hintergrund: Das von mir angesprochene Beispiel ist für eine Programmieraufgabe (natürlich nicht in so einfacher Form, das war nur, damit das Problem klar wird), und da wird gefordert, dass die Pointer genutzt werden (auch wenn es noch so merkwürdig und unlogisch ist).</p>
</blockquote>
<p>nein es ist nicht unlogisch, für lernzwecke ist sowas ja vollkommen ok. aber du versuchst eine kuh dahin zu geben wo ein auto erwartet wird(int &lt;---&gt; zeiger auf eine klasse)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104275</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 10 Aug 2011 08:09:42 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 08:47:15 GMT]]></title><description><![CDATA[<p>Aber mal rein zum Verständnis: Wenn ich folgenden Code habe</p>
<pre><code class="language-cpp">Basisklasse *pB;
pB = &amp;b.wert1;
</code></pre>
<p>und b.wert1 im Konstruktor den Wert 1 zugewiesen bekommt, dann weise ich dem Zeiger pB doch im obigen Beispiel nur die Adresse von b.wert1 zu oder nicht? Und diese müsste ich doch auch an einen andere Zeiger übergeben können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104294</guid><dc:creator><![CDATA[imac2011]]></dc:creator><pubDate>Wed, 10 Aug 2011 08:47:15 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 08:52:49 GMT]]></title><description><![CDATA[<p>Du hast es scheinbar immer noch nicht verstanden.<br />
Deine Typen passen doch nicht.<br />
pB ist ein Zeiger auf Basisklasse, &amp;b.wert1 liefert dir einen Zeiger auf int. Die kannst du nicht zuweisen, die Typen müssen schon stimmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104296</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 10 Aug 2011 08:52:49 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 09:01:50 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Du hast es scheinbar immer noch nicht verstanden.<br />
Deine Typen passen doch nicht.<br />
pB ist ein Zeiger auf Basisklasse, &amp;b.wert1 liefert dir einen Zeiger auf int. Die kannst du nicht zuweisen, die Typen müssen schon stimmen.</p>
</blockquote>
<p>Ja, dass die Typen nicht passen, habe ich nun verstanden, steht ja auch in der Fehlermeldung. Was ich aber nicht verstanden habe ist, wie ich das nun gelöst bekomme, den Wert an den Zeiger der Basisklasse zu übergeben. Dies ist ja ohne Weiteres nicht möglich, bedingt durch die angesprochene Typeninkompatibilität.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104298</guid><dc:creator><![CDATA[imac2011]]></dc:creator><pubDate>Wed, 10 Aug 2011 09:01:50 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 10:52:58 GMT]]></title><description><![CDATA[<p>imac2011 schrieb:</p>
<blockquote>
<p>Ja, dass die Typen nicht passen, habe ich nun verstanden, steht ja auch in der Fehlermeldung. Was ich aber nicht verstanden habe ist, wie ich das nun gelöst bekomme,...</p>
</blockquote>
<p>In dem du auch etwas entsprechendes übergibst;</p>
<pre><code class="language-cpp">Basisklasse b;
Basisklasse *pB;
pB = &amp;b.wert1; // Unsinn
pB = &amp;b; // Besser
// Über den Zeiger kannst du ja auf die Werte zugreifen:
int wert = pB-&gt;wert1;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2104345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104345</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 10 Aug 2011 10:52:58 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 11:36:01 GMT]]></title><description><![CDATA[<p>Soo, hab das Ganze nun so gelöst, und so funktioniert es auch. Gibt es noch Anregungen eurerseits zu dem folgenden Quellcode?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Basisklasse {
  public: int wert1;
          int wert2;
  public:  Basisklasse();
           void tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2);
};

Basisklasse::Basisklasse() {
  wert1 = 1;
  wert2 = 2;
}

void Basisklasse::tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2) {

  Basisklasse bX;
  Basisklasse bY;

  pBasis1 = &amp;bX;
  pBasis2 = &amp;bY;

  int a = pBasis1-&gt;wert1;
  int b = pBasis2-&gt;wert2;

  cout &lt;&lt; a&lt;&lt; &quot; + &quot; &lt;&lt; b&lt;&lt; endl;

}

int main() {

  Basisklasse b;

  Basisklasse *pWert1;
  Basisklasse *pWert2;

  pWert1-&gt;wert1;
  pWert2-&gt;wert2;

  b.tuWas(pWert1,pWert2);

}
</code></pre>
<p>Ansonsten vielen Dank für die schnelle Hilfe!!!!!!!! <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/2104378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104378</guid><dc:creator><![CDATA[imac2011]]></dc:creator><pubDate>Wed, 10 Aug 2011 11:36:01 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 12:08:32 GMT]]></title><description><![CDATA[<p>imac2011 schrieb:</p>
<blockquote>
<p>Soo, hab das Ganze nun so gelöst, und so funktioniert es auch. Gibt es noch Anregungen eurerseits zu dem folgenden Quellcode?</p>
</blockquote>
<p>Das er Fehlerhaft ist, und eigentlich gnadenlos abschmieren sollte. Zudem scheinst du Zeiger nicht verstanden zu haben, und unnötige Kopien anzulegen.</p>
<p>Du übergibst (uninitialisiere) Zeiger, dereferenzierst diese, und weist das Ergebnis lokalen Variablen zu.</p>
<p>Ich glaube eher du willst so etwas (Auch wenn es weiterhin unsinnig ist):</p>
<pre><code class="language-cpp">void Basisklasse::tuWas(
  Basisklasse *p)
{
  // Da Zeiger können null sein können, auch behandeln.
  if(!p)
    return;
  // Über den Zeiger die Werte ausgeben
  cout &lt;&lt; p-&gt;a &lt;&lt; &quot; + &quot; &lt;&lt; p-&gt;b&lt;&lt; endl;
}

int main()
{
  Basisklasse b;
  b.tuWas(&amp;b);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2104399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104399</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 10 Aug 2011 12:08:32 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 12:33:54 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Das er Fehlerhaft ist, und eigentlich gnadenlos abschmieren sollte. Zudem scheinst du Zeiger nicht verstanden zu haben, und unnötige Kopien anzulegen.</p>
<p>Du übergibst (uninitialisiere) Zeiger, dereferenzierst diese, und weist das Ergebnis lokalen Variablen zu.</p>
<p>Ich glaube eher du willst so etwas (Auch wenn es weiterhin unsinnig ist):</p>
</blockquote>
<p>Eigentlich will ich glaube ich mehr sowas:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Basisklasse {
  public: int wert1;
          int wert2;
  public:  Basisklasse();
           void tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2);
};

Basisklasse::Basisklasse() {
  wert1 = 1;
  wert2 = 2;
}

void Basisklasse::tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2) {

  int a = pBasis1-&gt;wert1;
  int b = pBasis2-&gt;wert2; 

  cout &lt;&lt; a &lt;&lt; &quot; + &quot; &lt;&lt; b &lt;&lt; endl;

}

int main() {

  Basisklasse b;

  b.tuWas(&amp;b,&amp;b);

}
</code></pre>
<p>Aber wahrscheinlich hast du recht, das Prinzip der Zeiger muss ich echt noch ein paar mal lesen... und dann noch mal lesen ... und dann noch mal lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104409</guid><dc:creator><![CDATA[imac2011]]></dc:creator><pubDate>Wed, 10 Aug 2011 12:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 12:45:59 GMT]]></title><description><![CDATA[<p>imac2011 schrieb:</p>
<blockquote>
<p>Eigentlich will ich glaube ich mehr sowas:</p>
<pre><code class="language-cpp">//...
void Basisklasse::tuWas(Basisklasse *pBasis1, Basisklasse *pBasis2) {  
  int a = pBasis1-&gt;wert1;
  int b = pBasis2-&gt;wert2; 

  cout &lt;&lt; a &lt;&lt; &quot; + &quot; &lt;&lt; b &lt;&lt; endl;
}
//...
</code></pre>
</blockquote>
<p>Auch hier hast du das Problem das Zeiger den Wert NULL/0 annehmen können (womit man Zeiger, denen man nicht direkt einen gültigen Wert zuweist, immer initialisieren sollte). Wenn ich deine Methode wie folgt verwende, solltest du eine Zugriffsverletzung bekommen:</p>
<pre><code class="language-cpp">int main() {
  Basisklasse b;
  b.tuWas(0,0);
}
</code></pre>
<p>Davon abgesehen wundert es mich, wie verschwenderisch du mit Leerzeilen umgehst, aber anderseits bei der Klammersetzung die kompakte Schreibweise vorziehst (was reine Geschmackssache ist, aber man einheitlich machen sollte). Für ein Forum solltest du zumindest die Leerzeilen auf die sinnvollen reduzieren (Damit andere den Code besser überblicken können).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104413</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 10 Aug 2011 12:45:59 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 13:14:26 GMT]]></title><description><![CDATA[<p>Sein letzter Code ist doch in Ordnung. Dass Nullzeiger übergeben werden können, ja gut. Darf man halt einfach nicht machen (dann wären Referenzen besser, aber egal).</p>
<p>Also bei Zeigern gibt es nicht viel zu verstehen. Die speichern einfach nur eine Adresse auf irgendeine andere Variable (wobei ein Klassenobjekt auch eine Variable ist). Prinzipiell haben Adressen ja das gleiche Format, weswegen man theoretisch überlegen könnte einfach nur einen speziellen Typ &quot;Zeiger&quot; zu nutzen.</p>
<p>Doch in C++ gibt es dann auch noch Typsicherheit bei so was. Das bedeutet, Du gibst auch an, auf was ein Zeiger zeigen muss.</p>
<pre><code class="language-cpp">TypAufDenDerZeigerZeigt* zeiger;
</code></pre>
<p>Jetzt kannst Du in <code>zeiger</code> Adressen von Objekten speichern mit der Einschränkung, dass diese Objekte vom Typ <code>TypAufDenDerZeigerZeigt</code> sein muss.</p>
<p>Zeiger nutzt man in C++ in deinem Zusammenhang (gibt noch andere), um call by reference umzusetzen. Würdest Du dein Objekt ohne Zeiger übergeben, würde nämlich call by value umgesetzt werden, d.h. das gesamte Objekte würde kopiert werden. Für Deine Anzeige macht das praktisch keinen Unterschied in der Ausgabe, aber die Kopie ist aufwendiger zu sagen &quot;Ich habe die Baupläne für das Objekt mitgebracht, ich baue es Mal kurz auf&quot; als nur kurz zu sagen &quot;Hey, das Objekt, das ich meine, steht da hinten&quot;.</p>
<p>Der große Unterschied ist sonst, dass Du bei Zeigerübergabe beim Ändern von Werten der Objekte auch das Objekt in der main änderst (ist ja das gleiche, wir haben ja nur die Position mitegeteilt). Wenn Du es call by value übergibst, ist das ein neues Objekt. Wenn Du z.B. einen Baum kopierst und in Deiner Funktion einen Ast absägst, ist der Baum in der main unversehrt.</p>
<p>Und wenn jetzt eine Funktion erwartet, dass Du ihr &quot;zeigst&quot;, wo ein Baum (Basisklasse) steht, dann kannst Du ihr nicht sagen, wo ein Ast (int) ist, denn das will die Funktion nicht haben. Sie ruft die Polizei (Compiler) und lässt den Positions-Angeber (Programmierer, hier OP) standrechtlich erschießen.</p>
<p>Daher: Immer auf die Typen achten, auch bei Zeigern!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104438</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 10 Aug 2011 13:14:26 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Problem mit Basisklasse und Übergabe an Methode on Wed, 10 Aug 2011 14:53:20 GMT]]></title><description><![CDATA[<p>Ok, das mit den Leerzeilen nehme ich mir mal fürs Forum zu Herzen, aber ansonsten schreibt es sich so (für meine persönliche Meinung) besser.</p>
<p>Danke für ausführliche Erklärung. Ich werde nun mal probieren, das Ganze auf meine Aufgabe umzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104499</guid><dc:creator><![CDATA[imac2011]]></dc:creator><pubDate>Wed, 10 Aug 2011 14:53:20 GMT</pubDate></item></channel></rss>