<?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[[ERLEDIGT] Zugriff auf Klassenfremde Methoden]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich habe eine Klasse (A) in der die Methode implementiert ist:</p>
<pre><code class="language-cpp">virtual wxToolBar *GetToolBar() const { return m_frameToolBar; }
</code></pre>
<p>Nun leite ich eine Klasse (B) von (A) ab,<br />
diese hat selbstverständlich Zugriff auf diese Methode.</p>
<p>Ich möchte aus einer dritten Klasse (C),<br />
welche nirgendwo aus der Klasse (A) abgeleitet wird<br />
auf die Methode GetToolBar von (B) zugreifen können.</p>
<p>Kann ich es so kapseln dass <strong>nur eine</strong> Methode<br />
aus der Klasse (C) <strong>nur auf diese</strong> Methode (GetToolBar)<br />
aus der Klasse (B) zugreifen kann?</p>
<p>Sozusagen: Einer KlassenMethode eine Friend Methode zuordnen.</p>
<p>Die Klasse B ist ein einfaches Fenster während<br />
die Klasse C ein OpenGL-Canvas ist der je nach<br />
Interaktion die Schaltflächen auf der Toolbar<br />
freischalten soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/267629/erledigt-zugriff-auf-klassenfremde-methoden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 09:36:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/267629.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 May 2010 14:18:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Thu, 27 May 2010 17:08:51 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich habe eine Klasse (A) in der die Methode implementiert ist:</p>
<pre><code class="language-cpp">virtual wxToolBar *GetToolBar() const { return m_frameToolBar; }
</code></pre>
<p>Nun leite ich eine Klasse (B) von (A) ab,<br />
diese hat selbstverständlich Zugriff auf diese Methode.</p>
<p>Ich möchte aus einer dritten Klasse (C),<br />
welche nirgendwo aus der Klasse (A) abgeleitet wird<br />
auf die Methode GetToolBar von (B) zugreifen können.</p>
<p>Kann ich es so kapseln dass <strong>nur eine</strong> Methode<br />
aus der Klasse (C) <strong>nur auf diese</strong> Methode (GetToolBar)<br />
aus der Klasse (B) zugreifen kann?</p>
<p>Sozusagen: Einer KlassenMethode eine Friend Methode zuordnen.</p>
<p>Die Klasse B ist ein einfaches Fenster während<br />
die Klasse C ein OpenGL-Canvas ist der je nach<br />
Interaktion die Schaltflächen auf der Toolbar<br />
freischalten soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903248</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 17:08:51 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Thu, 27 May 2010 14:28:48 GMT]]></title><description><![CDATA[<p>Du kannst ganz direkt Memberfunktionen anderer Klassen als friend deklarieren (sofern diese sichtbar sind):</p>
<pre><code class="language-cpp">class foo {
public:
   void Func1();

private:
   void Func2();
};

class bar {
private:
   int b;
   friend void foo::Func1( );
};

// Func1 hat Zugriff auf b, Func2 nicht.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1903252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903252</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 27 May 2010 14:28:48 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Thu, 27 May 2010 14:41:54 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Du kannst ganz direkt Memberfunktionen anderer Klassen als friend deklarieren (sofern diese sichtbar sind):</p>
<pre><code class="language-cpp">class foo {
public:
   void Func1();

private:
   void Func2();
};

class bar {
private:
   int b;
   friend void foo::Func1( );
};

// Func1 hat Zugriff auf b, Func2 nicht.
</code></pre>
</blockquote>
<p>Ich möchte aber:</p>
<pre><code class="language-cpp">class foo {
public:
   virtual void funca();
   friend void bar::funcb()
};

class bar {
private:
   int b;
   void funcb( );
};

// Func1 hat Zugriff auf b, Func2 nicht.
</code></pre>
<p>Die Funktion: &quot;friend void bar::funcb()&quot; soll nur auf die Funktion funca zugreifen dürfen. funca() erledigt dann den Rest.</p>
<p>Der normale Aufruf aus der Klasse (B) lautet:</p>
<pre><code class="language-cpp">GetToolBarGetToolBar()-&gt;EnableTool(IDM_TOGGLE_LINE,false);
</code></pre>
<p>Kann ich es irgendwie erreichen dass ich es aus der Klasse (C) so aufrufen kann:</p>
<pre><code class="language-cpp">B::GetToolBar()-&gt;EnableTool(IDM_TOGGLE_LINE,false);
</code></pre>
<p>Ich glaube dass ich mich mittlerweile mit Events auseinandersetzen muss...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903262</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 14:41:54 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Thu, 27 May 2010 15:03:29 GMT]]></title><description><![CDATA[<p>Ich bestehe nicht auf diese Lösung, die auch wahrscheinlich nicht geht. Ich bin für intelligente Ideen offen... Ein schlichtes &quot;Nein, es geht nicht.&quot; würde mir im Moment auch helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903272</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 15:03:29 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Thu, 27 May 2010 15:14:31 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Ein schlichtes &quot;Nein, es geht nicht.&quot; würde mir im Moment auch helfen.</p>
</blockquote>
<p>Es geht 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/1903278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903278</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 27 May 2010 15:14:31 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Thu, 27 May 2010 15:21:42 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>darkfate schrieb:</p>
<blockquote>
<p>Ein schlichtes &quot;Nein, es geht nicht.&quot; würde mir im Moment auch helfen.</p>
</blockquote>
<p>Es geht 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>
</blockquote>
<p>Danke <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/1903280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903280</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 15:21:42 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Thu, 27 May 2010 15:38:14 GMT]]></title><description><![CDATA[<p>Außer über sehr skurrile Umwege. Man kann sich zunutze machen, dass alle Member von A Zugriff auf andere private Member von A haben. Man nehme also ein struct, mache es zu einer öffentlichen anonymen Klasse in A, von der A ein einiges statisches Member hat, und gebe ihm einen ebenso privaten operator() mit und deklariere die Funktion in B als friend des structs. Der op() des structs hat nichts zu tun als die fragliche Funktion in A aufzurufen. Damit hat die Funktion in B nur indirekt Zugriff auf die Funktion in A, und zwar nur auf diese, weil sie ja nicht Freund von A selber ist:</p>
<pre><code class="language-cpp">class A;
class B
{
public:
  void bar(A const&amp;);
  void bar2(A const&amp;);
};

class A
{
   void foo() const {std::cout &lt;&lt; &quot;A::foo()&quot; &lt;&lt; std::endl;}
public:
   static struct {
   private:
     void operator()(A const&amp; a) const 
     {a.foo();}
     friend void B::bar(A const&amp;);
   } CallFoo;

};

void B::bar(A const&amp; a)
{
  A::CallFoo(a);
}

//void B::bar2(A const&amp; a)
//{
//  A::CallFoo(a); //Fehler: bar2 ist kein friend des anonymen structs
//}

int main()
{
  A a;
  B b;
  b.bar(a);
}
</code></pre>
<p>Kompiliert unter gcc, nicht getestet unter MSVC.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903288</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 27 May 2010 15:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Thu, 27 May 2010 15:45:37 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>....</p>
</blockquote>
<p>Danke dir <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/1903292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903292</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 27 May 2010 15:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Fri, 28 May 2010 06:27:53 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">static struct {
   private:
</code></pre>
<p>...</p>
</blockquote>
<p>Gibt es einen konkreten Grund dafür, dass Du da nicht class nimmst? Gibt es keine anonyme Klassen?<br />
Oder einfach, weil man so &quot;besser sieht, was gemeint ist&quot;?<br />
Aber diese Form der &quot;Verantwortungsverlagerung&quot; finde ich gar nicht so schlecht!<br />
Aber in 99,99% der Fälle tut's wohl auch ein public wrapper.<br />
Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903503</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 28 May 2010 06:27:53 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Fri, 28 May 2010 06:31:03 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Gibt es keine anonyme Klassen?<br />
Oder einfach, weil man so &quot;besser sieht, was gemeint ist&quot;?</p>
</blockquote>
<p>Letzteres, es gibt auch anonyme Klassen. Ursprünglich hatte ich geplant, jedem A ein eigenes anonymes Objekt mitzugeben, das eine Referenz auf das zugehörige A hält.</p>
<blockquote>
<p>Aber diese Form der Verantwortungsverlagerung finde ich gar nicht so schlecht!</p>
</blockquote>
<p>Ich schon <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="😉"
    /> Wenn sowas nötig scheint, läuft meist irgendwas schief. Wenn ich solche Konstrukte sehe denk ich mir meist &quot;muss das so oder will da jmd einen Designfehler ausbügeln?&quot; Ich habs nur aus rein technischem Interesse mal versucht, das gestellte Problem zu lösen...</p>
<blockquote>
<p>Andererseits: Eine einfache public-Funktion hätte es auch getan ... <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>
</blockquote>
<p>Auf die hätte wiederum jeder Zugriff.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903506</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 28 May 2010 06:31:03 GMT</pubDate></item><item><title><![CDATA[Reply to [ERLEDIGT] Zugriff auf Klassenfremde Methoden on Fri, 28 May 2010 06:50:43 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>...</p>
<blockquote>
<p>Aber diese Form der Verantwortungsverlagerung finde ich gar nicht so schlecht!</p>
</blockquote>
<p>Ich schon ...</p>
</blockquote>
<p>Ich hätte mich genauer ausdrücken sollen: &quot;... diese Form der Verantwortungsverlagerung zu kennen, finde ich gar nicht so schlecht!...&quot;<br />
Bei ir geht immer schon eine fette Warnlampe an, wenn ich &quot;friend&quot; irgendwo sehe und habe es (wenn ich mich recht entsinne) bislang immer vermeiden können.<br />
Aber EIN Grund für meine Abneigung war eben genau die Unmöglichkeit, den Zugriff irgendwie einzugreifen - und das kann man wohl umgehen.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>...</p>
<blockquote>
<p>Andererseits: Eine einfache public-Funktion hätte es auch getan ... <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>
</blockquote>
<p>Auf die hätte wiederum jeder Zugriff.</p>
</blockquote>
<p>Deswegen hatte ich das gleich korrigiert - aber wohl immer noch zu langsam für Dich.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1903512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1903512</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 28 May 2010 06:50:43 GMT</pubDate></item></channel></rss>