<?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[Frage bezüglich Zugriffsrechten]]></title><description><![CDATA[<pre><code>#include &lt;iostream&gt;
#include &lt;cstring&gt;
using namespace std;

class String
{
private:
	char *buffer;
	unsigned int len;
public:
	String(const char* s=&quot;&quot;)
	{
		len = strlen(s);
		buffer = new char[len +1];
		strcpy(buffer, s);
	}
	~String(){delete [] buffer;}
	String(const String &amp; s)
	{
		len = s.len;
		buffer = new char [len +1];
		strcpy(buffer, s.buffer);
	}
	char *get_String() const {return buffer;}
};

int main(void)
{
	String string1(&quot;Adam&quot;);
	cout &lt;&lt; string1.get_String() &lt;&lt; &quot;\n&quot;;
	return 0;
}
</code></pre>
<p>Ich bin ein Anfänger und kämpfe gerade mit Klassen und Objekten. Mit der folgenden Frage habe ich gerade Probleme. Beim Kopierkonstruktor sieht man den folgenden Ausdruck. len = s.len; Allerdings ist len als private markiert. Deswegen verstehe ich nicht wieso ich darauf Zugriff habe. Selbst wenn der Zugriff aus einem String Objekt erfolgt, so handelt es sich doch um einen Zugriff auf ein anderes String Objekt, welches als Referenz mit dem Kopierkonstruktor übergeben wird. Das gleiche Verhalten habe ich schon beim Überladen von Operatoren beobachtet. Wieso verstehe ich allerdings nicht.<br />
Wenn ich richtig liege, dann wäre eine ähnlich Funktion beim main() unmöglich.<br />
Kann man somit aus einem Objekt auf ein anderes Objekt der selben Klasse immer zugreifen, selbst wenn es sich dabei um private Methoden handelt?</p>
<p>Für die Antwort danke ich im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272302/frage-bezüglich-zugriffsrechten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 00:09:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272302.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Aug 2010 16:15:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sat, 14 Aug 2010 16:15:23 GMT]]></title><description><![CDATA[<pre><code>#include &lt;iostream&gt;
#include &lt;cstring&gt;
using namespace std;

class String
{
private:
	char *buffer;
	unsigned int len;
public:
	String(const char* s=&quot;&quot;)
	{
		len = strlen(s);
		buffer = new char[len +1];
		strcpy(buffer, s);
	}
	~String(){delete [] buffer;}
	String(const String &amp; s)
	{
		len = s.len;
		buffer = new char [len +1];
		strcpy(buffer, s.buffer);
	}
	char *get_String() const {return buffer;}
};

int main(void)
{
	String string1(&quot;Adam&quot;);
	cout &lt;&lt; string1.get_String() &lt;&lt; &quot;\n&quot;;
	return 0;
}
</code></pre>
<p>Ich bin ein Anfänger und kämpfe gerade mit Klassen und Objekten. Mit der folgenden Frage habe ich gerade Probleme. Beim Kopierkonstruktor sieht man den folgenden Ausdruck. len = s.len; Allerdings ist len als private markiert. Deswegen verstehe ich nicht wieso ich darauf Zugriff habe. Selbst wenn der Zugriff aus einem String Objekt erfolgt, so handelt es sich doch um einen Zugriff auf ein anderes String Objekt, welches als Referenz mit dem Kopierkonstruktor übergeben wird. Das gleiche Verhalten habe ich schon beim Überladen von Operatoren beobachtet. Wieso verstehe ich allerdings nicht.<br />
Wenn ich richtig liege, dann wäre eine ähnlich Funktion beim main() unmöglich.<br />
Kann man somit aus einem Objekt auf ein anderes Objekt der selben Klasse immer zugreifen, selbst wenn es sich dabei um private Methoden handelt?</p>
<p>Für die Antwort danke ich im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940027</guid><dc:creator><![CDATA[petruschka01]]></dc:creator><pubDate>Sat, 14 Aug 2010 16:15:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sat, 14 Aug 2010 16:21:48 GMT]]></title><description><![CDATA[<p>Zugriffsrechte beziehen sich in C++ auf Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940029</guid><dc:creator><![CDATA[AngelDance]]></dc:creator><pubDate>Sat, 14 Aug 2010 16:21:48 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sat, 14 Aug 2010 16:33:32 GMT]]></title><description><![CDATA[<p>Das habe ich um ehrlich zu sein nicht verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940036</guid><dc:creator><![CDATA[petruschka]]></dc:creator><pubDate>Sat, 14 Aug 2010 16:33:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sat, 14 Aug 2010 16:45:03 GMT]]></title><description><![CDATA[<p>Das beantwortet deine letzte Frage mit: Ja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940040</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sat, 14 Aug 2010 16:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sat, 14 Aug 2010 16:47:34 GMT]]></title><description><![CDATA[<p>Dann bedanke ich mich für die schnelle Antwort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940041</guid><dc:creator><![CDATA[petruschka]]></dc:creator><pubDate>Sat, 14 Aug 2010 16:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sun, 15 Aug 2010 09:24:43 GMT]]></title><description><![CDATA[<p>Du kannst von außerhalb der Klasse nicht auf private Member zugreifen, sondern nur auf die öffentlichen Member, also die Schnittstelle.<br />
Die öffentlichen Member selber, also Elementfunktionen oder auch Konstruktoren wie der Kopierkonstruktor können natürlich auf die privaten Member zugreifen.<br />
Wer soll den sonst drauf zugreifen können:D <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>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940189</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Sun, 15 Aug 2010 09:24:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sun, 15 Aug 2010 09:43:20 GMT]]></title><description><![CDATA[<p>Das richtige Wort ist Sichtbarkeit, nicht Zugriffsrecht. In einem Haus sehe ich alles was drinnen ist, von draussen nur das am Fenster.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940195</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sun, 15 Aug 2010 09:43:20 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sun, 15 Aug 2010 10:04:23 GMT]]></title><description><![CDATA[<p>Datenkapselung nennt man das Ganze auch. Auf private Member hat nur die Klasse selbst zugriff. Lies dich etwas in OOP ein, dann wird dir das schnell klar...</p>
<p>Omicron</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940199</guid><dc:creator><![CDATA[Omicron]]></dc:creator><pubDate>Sun, 15 Aug 2010 10:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sun, 15 Aug 2010 10:07:45 GMT]]></title><description><![CDATA[<p>Mal was ganz anderes: Deiner Klasse fehlt ein Zuweisungsoperator.</p>
<pre><code class="language-cpp">String foo = &quot;foo&quot;; // Kopier-Initialisierung, OK
String bar = &quot;bar&quot;; // Kopier-Initialisierung, OK
foo = bar; // Zuweisung! --&gt; foo.buffer == bar.buffer  Ooops!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1940200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940200</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 15 Aug 2010 10:07:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sun, 15 Aug 2010 10:09:56 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Das richtige Wort ist Sichtbarkeit, nicht Zugriffsrecht. In einem Haus sehe ich alles was drinnen ist, von draussen nur das am Fenster.</p>
</blockquote>
<p>Das richtige Wort ist Zugriffsrecht. Private Member sind für jeden sichtbar. Ihr Name kann aber nur von Membern und Freunden der Klasse (der Klasse, nicht nur des jeweiligen Objekts) verwendet werden.<br />
Dass privates von aussen sichtbar ist, spielt an ein paar Stellen ein Rolle. z.B. müssen Parametertypen deklariert sein, auch wenn sie nie jemand von aussen benutzen kann und wird. Außerdem führt die Sichtbarkeit dazu, dass private Methoden bei der Namensauflösung brücksichtigt werden. Da name lookup und overload resolution vor der Prüfung der Zugriffsrechte stattfindet kann es zu recht überraschenden Compiler Fehlern kommen.</p>
<pre><code class="language-cpp">class A
{
public:
  void f(float);
private:
  void f(int);
};

int main()
{
  A a;
  a.f(0); // wählt f(int) auch wenn f(float) gehen würde // -&gt; kein zugriff
  retunr 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1940201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940201</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sun, 15 Aug 2010 10:09:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sun, 15 Aug 2010 10:23:50 GMT]]></title><description><![CDATA[<p>Die erstbeste Quelle: <a href="http://en.wikipedia.org/wiki/Class_diagram" rel="nofollow">http://en.wikipedia.org/wiki/Class_diagram</a> , <a href="http://de.wikipedia.org/wiki/Klassendiagramm" rel="nofollow">http://de.wikipedia.org/wiki/Klassendiagramm</a> unter Members.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940205</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sun, 15 Aug 2010 10:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sun, 15 Aug 2010 10:36:38 GMT]]></title><description><![CDATA[<p>Da geht es um UML.<br />
Ich weiß jetzt keinen Link. Es müsste aber eigentlich ein gotw dazu geben. Es gibt zumindest in &quot;Exp. C++ Style&quot; mindestens ein Item darüber.<br />
Privates ist in C++ sichtbar, es sei denn man pimpled es weg oder versteckt es irgendwie anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940208</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sun, 15 Aug 2010 10:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sun, 15 Aug 2010 14:20:32 GMT]]></title><description><![CDATA[<p>brotbernd schrieb:</p>
<blockquote>
<p>Da geht es um UML.<br />
Ich weiß jetzt keinen Link. Es müsste aber eigentlich ein gotw dazu geben. Es gibt zumindest in &quot;Exp. C++ Style&quot; mindestens ein Item darüber.<br />
Privates ist in C++ sichtbar, es sei denn man pimpled es weg oder versteckt es irgendwie anders.</p>
</blockquote>
<p>Ich pimpel dich auch gleich weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940265</guid><dc:creator><![CDATA[Obachegga]]></dc:creator><pubDate>Sun, 15 Aug 2010 14:20:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Zugriffsrechten on Sun, 15 Aug 2010 20:18:28 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Mal was ganz anderes: Deiner Klasse fehlt ein Zuweisungsoperator.</p>
<pre><code class="language-cpp">String foo = &quot;foo&quot;; // Kopier-Initialisierung, OK
String bar = &quot;bar&quot;; // Kopier-Initialisierung, OK
foo = bar; // Zuweisung! --&gt; foo.buffer == bar.buffer  Ooops!
</code></pre>
</blockquote>
<p>Genau, da hat Krümelkacker recht.<br />
Merk dir die &quot;großen drei&quot; oder die &quot;dreier Regel&quot; welche besagt, dass man entweder Destruktor, Kopierkonstruktor und Zuweisungsoperator nicht selber erstellen braucht und die compilergenerierten verwenden kann, oder man muss alle drei selber erstellen.<br />
Muss man einen selber erstellen, sind die anderen beiden eigentlich auch so gut wie immer von nöten( Ausnahme ist ein virtueller Destruktor in der Basisklasse).<br />
Man braucht sie eigentlich immer, wenn man dynamisch Speicher zuweißt, also mit Zeigern rumhantiert.</p>
<p>Hoffe konnte dir helfen.</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1940377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1940377</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Sun, 15 Aug 2010 20:18:28 GMT</pubDate></item></channel></rss>