<?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[friend Klasse (provokante Frage)]]></title><description><![CDATA[<p>Hi Community,</p>
<p>ich wollte mal fragen, was ihr von diesen friend-Trick haltet?</p>
<p>Angenommen es gibt eine Klasse Window, in der eine geschützte Methode ist (die man selber umbedingt aufrufen will, ohne das Design der Klasse Window zu ändern bzw. ändern zu wollen).</p>
<pre><code class="language-cpp">void
Test::DoSomething(Window *pWindow)
{
  class SpecialWindow : public Window
  {
    friend class Test;
  };

  (static_cast&lt;SpecialWindow*&gt;(pWindow))-&gt;DoSomethingProtected();
}
</code></pre>
<p>Ich würde auf keinen Fall meine Klasse Test als friend in Window eintragen.</p>
<p>Ist dieser Hack (!) ok oder wie würdet ihr es lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180863/friend-klasse-provokante-frage</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 00:37:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180863.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 May 2007 14:08:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to friend Klasse (provokante Frage) on Mon, 07 May 2007 14:08:12 GMT]]></title><description><![CDATA[<p>Hi Community,</p>
<p>ich wollte mal fragen, was ihr von diesen friend-Trick haltet?</p>
<p>Angenommen es gibt eine Klasse Window, in der eine geschützte Methode ist (die man selber umbedingt aufrufen will, ohne das Design der Klasse Window zu ändern bzw. ändern zu wollen).</p>
<pre><code class="language-cpp">void
Test::DoSomething(Window *pWindow)
{
  class SpecialWindow : public Window
  {
    friend class Test;
  };

  (static_cast&lt;SpecialWindow*&gt;(pWindow))-&gt;DoSomethingProtected();
}
</code></pre>
<p>Ich würde auf keinen Fall meine Klasse Test als friend in Window eintragen.</p>
<p>Ist dieser Hack (!) ok oder wie würdet ihr es lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280339</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 07 May 2007 14:08:12 GMT</pubDate></item><item><title><![CDATA[Reply to friend Klasse (provokante Frage) on Mon, 07 May 2007 14:27:13 GMT]]></title><description><![CDATA[<p>dein &quot;Hack&quot; funktioniert nur, wenn dir der compiler net dazwischenfuscht. beim dereferenzieren könnte dir genausogut das programm abrauschen.</p>
<p>noch schlimmer wäre, wenn der übergebene zeiger schon nur ein basisklassenzeiger auf das Objekt ist, also das übergebene Objekt bereits von Window abgeleitet wurde.<br />
Denn dann würdest du nicht nur von base auf ein nicht vorhandenes derived casten, sondern sogar einen crosscast zwischen derived und &quot;hypothetisches derived&quot; machen.</p>
<p>=&gt; nicht okay.</p>
<p>/7edit obwohl...das programm würde eigentlich nicht immer zwingend abstürzen, das ergebnis ist einfach nur undefiniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280348</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 07 May 2007 14:27:13 GMT</pubDate></item><item><title><![CDATA[Reply to friend Klasse (provokante Frage) on Mon, 07 May 2007 15:14:23 GMT]]></title><description><![CDATA[<p>Ich muß hinzufügen, daß die Methode 'DoSomethingProtected' als virtual deklariert ist.<br />
Und mein Compiler schluckt es (und auch zur Laufzeit funktioniert es), obwohl pWindow wirklich ein abgeleitetes Objekt ist bzw. meine reelle Methode sogar eine Liste von (abgeleiteten) Window-Objekten bearbeitet.</p>
<p>Aber wie geht es besser???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280383</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 07 May 2007 15:14:23 GMT</pubDate></item><item><title><![CDATA[Reply to friend Klasse (provokante Frage) on Mon, 07 May 2007 17:58:00 GMT]]></title><description><![CDATA[<p>&quot;friend&quot; ist wohl nie so wirklich befriedigend; &quot;anders&quot; geht's doch ganz einfach:</p>
<pre><code class="language-cpp">class SpecialWindow : public Window {
//... 
 public: 
    void DoItPublicNow() {
        /*this-&gt;*/DoSomethingProtected();
    }
};
</code></pre>
<p>Aber davon mal abgesehen stellt sich doch mehr die Frage <strong>ob</strong> man denn eine &quot;protected&quot; Methode so exponieren sollte.</p>
<p>Aus irgendeinem Grund wird sie ja &quot;protected&quot; sein; vielleicht verletzt man irgendeine Prä- oder Postkondition <a href="http://o.ae" rel="nofollow">o.ae</a>.<br />
Es könnte z.B. sein dass die Methode nur innerhalb einer Schablonenmethode (meint hier das Muster<br />
<a href="http://www.vico.org/pages/PatronsDisseny/Pattern%20Template%20Method/index.html" rel="nofollow">http://www.vico.org/pages/PatronsDisseny/Pattern%20Template%20Method/index.html</a> und nicht (C++)templates) gerufen werden sollte, die eine Policy garantiert etc.</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280405</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Mon, 07 May 2007 17:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to friend Klasse (provokante Frage) on Mon, 07 May 2007 15:55:06 GMT]]></title><description><![CDATA[<p>und das kompiliert ? <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/1280411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280411</guid><dc:creator><![CDATA[inp]]></dc:creator><pubDate>Mon, 07 May 2007 15:55:06 GMT</pubDate></item><item><title><![CDATA[Reply to friend Klasse (provokante Frage) on Mon, 07 May 2007 16:56:28 GMT]]></title><description><![CDATA[<p>inp schrieb:</p>
<blockquote>
<p>und das kompiliert ? <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>Bei mir mit VC 05 Exp Ed. schon.<br />
Und es läuft auch.</p>
<p>Bei Dir nicht?<br />
Compiler?</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280435</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Mon, 07 May 2007 16:56:28 GMT</pubDate></item><item><title><![CDATA[Reply to friend Klasse (provokante Frage) on Tue, 08 May 2007 11:10:12 GMT]]></title><description><![CDATA[<p>Gast++ schrieb:</p>
<blockquote>
<p>inp schrieb:</p>
<blockquote>
<p>und das kompiliert ? <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>Bei mir mit VC 05 Exp Ed. schon.<br />
Und es läuft auch.</p>
<p>Bei Dir nicht?<br />
Compiler?</p>
<p>Grüsse</p>
<p>*this</p>
</blockquote>
<p>habs nicht probiert,<br />
hab nur mit meinem kritischen auge bewertet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280796</guid><dc:creator><![CDATA[inp]]></dc:creator><pubDate>Tue, 08 May 2007 11:10:12 GMT</pubDate></item></channel></rss>