<?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[Vererbung und punktuelle Beschränkung der Sichtbarkeit]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich glaube mich dunkel zu erinnern, dass man einzelne Member einer abgeleiteten Klasse in der Sichtbarkeit einschränken kann.</p>
<pre><code class="language-cpp">class Base
{
  public:
    void do_sth1(){};
    void do_sth2(){};
};

class Derived : public Base
{

};
</code></pre>
<p>In diesem Beispiel möchte ich dafür sorgen, dass do_sth2() in Derived nicht zugreifbar ist. Jemand eine Idee? Nach Möglichkeit sollte die Base-Klasse unverändert bleiben.</p>
<p>Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252659/vererbung-und-punktuelle-beschränkung-der-sichtbarkeit</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 05:43:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252659.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Oct 2009 20:21:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung und punktuelle Beschränkung der Sichtbarkeit on Thu, 22 Oct 2009 20:21:48 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich glaube mich dunkel zu erinnern, dass man einzelne Member einer abgeleiteten Klasse in der Sichtbarkeit einschränken kann.</p>
<pre><code class="language-cpp">class Base
{
  public:
    void do_sth1(){};
    void do_sth2(){};
};

class Derived : public Base
{

};
</code></pre>
<p>In diesem Beispiel möchte ich dafür sorgen, dass do_sth2() in Derived nicht zugreifbar ist. Jemand eine Idee? Nach Möglichkeit sollte die Base-Klasse unverändert bleiben.</p>
<p>Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796724</guid><dc:creator><![CDATA[h_sch1978]]></dc:creator><pubDate>Thu, 22 Oct 2009 20:21:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und punktuelle Beschränkung der Sichtbarkeit on Thu, 22 Oct 2009 20:41:30 GMT]]></title><description><![CDATA[<p>Sowas vielleicht?</p>
<pre><code class="language-cpp">class Base
{
public:
   void do_sth1() {}
   void do_sth2() {}
};

class Derived : private Base
{
public:
   using Base::do_sth1;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1796731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796731</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Thu, 22 Oct 2009 20:41:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und punktuelle Beschränkung der Sichtbarkeit on Fri, 23 Oct 2009 07:55:48 GMT]]></title><description><![CDATA[<p>h_sch1978 schrieb:</p>
<blockquote>
<p>In diesem Beispiel möchte ich dafür sorgen, dass do_sth2() in Derived nicht zugreifbar ist. Jemand eine Idee? Nach Möglichkeit sollte die Base-Klasse unverändert bleiben.</p>
</blockquote>
<p>In Derived wirst du auf do_sth2() immer zugreifen können, solang do_sth2() nicht schon in Base als privat deklariert wurde. Die Sichtbarkeit nach aussen kannst du bestimmen, z.B. mit Sebastian Pizer vorschlag (der allerdings die &quot;Ist-Ein&quot; Beziehung von Derived und Base verhindert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796882</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Fri, 23 Oct 2009 07:55:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und punktuelle Beschränkung der Sichtbarkeit on Fri, 23 Oct 2009 08:14:05 GMT]]></title><description><![CDATA[<p>Ich meinte auch, dass man nicht von außerhalb über Derived auf do_sth2 zugreifen kann. Im Prinzip ist ja dann dies die Lösung, wenn ich nicht irre.</p>
<pre><code class="language-cpp">class Base
{
public:
   void do_sth1() {}
   void do_sth2() {}
};

class Derived : public Base
{
private:
   using Base::do_sth2;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1796890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796890</guid><dc:creator><![CDATA[h_sch1978]]></dc:creator><pubDate>Fri, 23 Oct 2009 08:14:05 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und punktuelle Beschränkung der Sichtbarkeit on Fri, 23 Oct 2009 08:18:16 GMT]]></title><description><![CDATA[<p>Ja, wobei du berücksichtigen musst, dass du natürlich über einen Zeiger/Referenz vom Typ Base wieder Zugriff bekommst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796891</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Fri, 23 Oct 2009 08:18:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und punktuelle Beschränkung der Sichtbarkeit on Fri, 23 Oct 2009 08:25:36 GMT]]></title><description><![CDATA[<p>h_sch1978 schrieb:</p>
<blockquote>
<p>Im Prinzip ist ja dann dies die Lösung, wenn ich nicht irre.</p>
</blockquote>
<p>Hmm...</p>
<pre><code class="language-cpp">Derived d;
Base* p = &amp;d;
p-&gt;do_sth2();
</code></pre>
<p>funktioniert immer noch.</p>
<p>Erklär mal, warum Du public inheritance brauchst und Funktion(en) der Basisklasse vor Zugriff schützen willst. Vielleicht hast Du ja einen guten Grund. Ich sehe keinen.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796896</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 23 Oct 2009 08:25:36 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und punktuelle Beschränkung der Sichtbarkeit on Fri, 23 Oct 2009 08:36:03 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Derived d;
Base* p = &amp;d;
p-&gt;do_sth2();
</code></pre>
<p>funktioniert immer noch.<br />
SP</p>
</blockquote>
<p>Klar, das funktioniert.</p>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Erklär mal, warum Du public inheritance brauchst und Funktion(en) der Basisklasse vor Zugriff schützen willst. Vielleicht hast Du ja einen guten Grund. Ich sehe keinen.<br />
SP</p>
</blockquote>
<p>Es ist so, dass ich an der Base Klasse nichts ändern kann. Die existiert so wie sie ist und wird von verschiedenen Personen genutzt. Also sind Änderungen an Base nicht gewünscht.</p>
<p>Die Methoden, die ich &quot;verstecken&quot; möchte sind set Funktionen. Ich erstelle eine Software, die dem Benutzer Zugriff auf die Daten von Base geben soll, ohne jedoch etwas ändern zu dürfen. Und das ohne viel Aufwand. Das man die umgehen kann ist akzeptabel. Wer das absichtlich macht, der ist am resultierenden Verhalten selber Schuld.<br />
Diese Lösung ist allerdings ein kleines Stück besser, als einfach Zugriff auf Base zu gewähren und zu sagen. Benutzt die set Funktionen nicht.</p>
<p>Gru0</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796900</guid><dc:creator><![CDATA[h_sch1978]]></dc:creator><pubDate>Fri, 23 Oct 2009 08:36:03 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und punktuelle Beschränkung der Sichtbarkeit on Fri, 23 Oct 2009 08:59:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Base
{
  public:
    void do_sth1(){};
    void do_sth2(){};
};

class BaseWithoutDoSth2 : public Base
{
    private: void do_sth2();
};

class BaseWithAll : public Base
{ };

class Derived : public BaseWithoutDoSth2
{ };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1796909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796909</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 23 Oct 2009 08:59:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und punktuelle Beschränkung der Sichtbarkeit on Fri, 23 Oct 2009 10:24:39 GMT]]></title><description><![CDATA[<p>Müsste hierbei nicht das Problem entstehen, dass ich in BaseWithoutDoSth2 nicht mehr auf do_sth2 zugreifen kann. Von wegen undefined reference.</p>
<p>KasF schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class Base
{
  public:
    void do_sth1(){};
    void do_sth2(){};
};

class BaseWithoutDoSth2 : public Base
{
    private: void do_sth2();
};

class BaseWithAll : public Base
{ };

class Derived : public BaseWithoutDoSth2
{ };
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1796981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796981</guid><dc:creator><![CDATA[h_sch1978]]></dc:creator><pubDate>Fri, 23 Oct 2009 10:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und punktuelle Beschränkung der Sichtbarkeit on Fri, 23 Oct 2009 12:39:25 GMT]]></title><description><![CDATA[<p>h_sch1978 schrieb:</p>
<blockquote>
<p>Müsste hierbei nicht das Problem entstehen, dass ich in BaseWithoutDoSth2 nicht mehr auf do_sth2 zugreifen kann.</p>
</blockquote>
<p>Nein, du müsstest die Basisklassenversion mit <code>Base::do_sth2()</code> aber explizit angeben.</p>
<p>Wieso willst du hier überhaupt Vererbung einsetzen? Solche starken Abhängigkeiten sollte man sich gut überlegen. Aggregation würde meines Erachtens mehr Sinn machen, da du dann auch das Interface selbst bestimmen könntest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1797062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1797062</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 23 Oct 2009 12:39:25 GMT</pubDate></item></channel></rss>