<?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[lesender Zugriff auf Objekt in Klasse]]></title><description><![CDATA[<p>Hi!<br />
Ich möchte in einer Klasse ein Objekt haben auf dass ich nur lesenden Zugriff habe. Ginge das so? Oder Muss blub dann ein Pointer sein?</p>
<pre><code class="language-cpp">class Foo {
Foo blub; 
void SetBlub(const Foo &amp;pBlub) const; //blub soll durch Setter (im Hauptprogramm) veränderbar sein, aber nicht aus der Klasse Foo heraus
};
</code></pre>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/223778/lesender-zugriff-auf-objekt-in-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 16:51:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/223778.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Sep 2008 21:41:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Tue, 30 Sep 2008 21:41:27 GMT]]></title><description><![CDATA[<p>Hi!<br />
Ich möchte in einer Klasse ein Objekt haben auf dass ich nur lesenden Zugriff habe. Ginge das so? Oder Muss blub dann ein Pointer sein?</p>
<pre><code class="language-cpp">class Foo {
Foo blub; 
void SetBlub(const Foo &amp;pBlub) const; //blub soll durch Setter (im Hauptprogramm) veränderbar sein, aber nicht aus der Klasse Foo heraus
};
</code></pre>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591143</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Tue, 30 Sep 2008 21:41:27 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 06:47:38 GMT]]></title><description><![CDATA[<p>Mach blub konstant und initialisiere es durch den c'tor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591221</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 01 Oct 2008 06:47:38 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 09:35:44 GMT]]></title><description><![CDATA[<p>Kann ich blub dann während des Programmablaufes dann noch ändern? Weil die Position eines Objektes z.B. ändert sich ja auch während des Programmes. So muss die Liste immer geändert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591327</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Wed, 01 Oct 2008 09:35:44 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 09:40:03 GMT]]></title><description><![CDATA[<p>Pille456 schrieb:</p>
<blockquote>
<p>Kann ich blub dann während des Programmablaufes dann noch ändern?</p>
</blockquote>
<p>Das widerspricht ein wenig dem &quot;nur lesenden Zugriff&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591330</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 01 Oct 2008 09:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 09:42:43 GMT]]></title><description><![CDATA[<p>Beschreibe nochmal genau, was Du überhaupt willst. Irgendwie ist das nicht klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591331</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 01 Oct 2008 09:42:43 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 10:09:35 GMT]]></title><description><![CDATA[<p>ich will die blub ändern können, aber die Objekte in blub nicht.<br />
Also sowas wie &quot;blub-&gt;SetIrgendwas()&quot; soll nicht gehen, aber blub = anderesBlub</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591355</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Wed, 01 Oct 2008 10:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 10:16:19 GMT]]></title><description><![CDATA[<p>Dann mach blub doch private.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591359</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 01 Oct 2008 10:16:19 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 10:21:55 GMT]]></title><description><![CDATA[<p>Dann kann ich über Setter auf die Blub-Eigenschaften immernoch zugreifen.<br />
ich will das das nicht mehr geht:</p>
<pre><code class="language-cpp">class Foo {
private: 
Foo Blub;

public:
void SetBlub(Foo pBlub);
void MachWas() {
Blub-&gt;SetBlub(this); //kann auch ein anders Blub sein; dies soll unerlaubt sein
Blub = Blub-&gt;GetBlub(); //Das soll man dürfen
}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1591365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591365</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Wed, 01 Oct 2008 10:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 10:52:53 GMT]]></title><description><![CDATA[<p>Pille456 schrieb:</p>
<blockquote>
<p>Dann kann ich über Setter auf die Blub-Eigenschaften immernoch zugreifen.<br />
ich will das das nicht mehr geht:</p>
<pre><code class="language-cpp">class Foo {
private: 
Foo Blub;

public:
void SetBlub(Foo pBlub);
void MachWas() {
Blub-&gt;SetBlub(this); //kann auch ein anders Blub sein; dies soll unerlaubt sein
Blub = Blub-&gt;GetBlub(); //Das soll man dürfen
}
};
</code></pre>
</blockquote>
<p>Häh?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591391</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 01 Oct 2008 10:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 11:00:48 GMT]]></title><description><![CDATA[<p>du kannst einer Klasse nicht verbieten, seine eigenen Member zu veraendern. Das einzige, was du machen kannst (und was du deiner Beschreibung nach auch machen willst) ist, den Member privat zu machen und nur einen oeffentlichen getter zur Verfuegung zu stellen.</p>
<p>mach doch mal ein normales Beispiel... dieses ewige <code>Blubb</code> , <code>Foo</code> usw. verbloedet einen ja richtig beim lesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591394</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Wed, 01 Oct 2008 11:00:48 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 12:20:36 GMT]]></title><description><![CDATA[<p>Pille456 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class Foo {
Foo blub; 
};
</code></pre>
</blockquote>
<p>Es ist trotzdem nicht möglich, in einer Klasse ein Objekt des eigenen, noch nicht definierten Typs als Member zu haben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591460</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 01 Oct 2008 12:20:36 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 12:44:07 GMT]]></title><description><![CDATA[<p>Ich will der Klasse ja nicht verbieten seine eigenen member zu verändern, sonder die aller anderen Klassen. Da das Hauptprogramm diese aber ändern können muss, muss ich getter einbauen die public sind.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Kann sein, dass das nicht geht, aber bei mir schluckt der Compiler dieses:</p>
<pre><code class="language-cpp">class MeineTolleKlasse;

class MeineTolleListe {
MeineTolleListe *next;
MeineTolleKlasse *klasse;
//Funktionen
};

class MeineTolleKlasse {
MeineTolleListe *listeAllerKlasseInSichtfeld; //hier dann nun die Frage ob ein pointer so sinn macht oder ich mit &quot;const&quot; arbeiten soll
//Funktionen etc.
//Was ich nun will ist dies: 
void machwas() {
listeAllerKlasseInSichtfeld-&gt;GetIrgendwas(); //Soll erlaubt sein
listeAllerKlasseInSichtfeld-&gt;SetIrgendwas(...); //Verboten sein
}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1591474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591474</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Wed, 01 Oct 2008 12:44:07 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 13:05:55 GMT]]></title><description><![CDATA[<p>wenn du einen setter verbieten willst, bau ihn doch einfach nicht ein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591487</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Wed, 01 Oct 2008 13:05:55 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 13:09:16 GMT]]></title><description><![CDATA[<p>Ich glaube ich beginne zu ahnen, was Du möchtest. Es sollen also Verweise auf Objekte aus dem Hauptprogramm an dieses Objekt übergeben werden, aber das Objekt soll aus diesen Verweisen nur lesen können?</p>
<p>Wenn die Getter alle const-correct sind, geht sowas:</p>
<pre><code class="language-cpp">class MeineTolleKlasse {
    MeineTolleListe const* listeAllerKlasseInSichtfeld; //hier dann nun die Frage ob ein pointer so sinn macht oder ich mit &quot;const&quot; arbeiten soll
    //Funktionen etc.
    //Was ich nun will ist dies: 
    void machwas() {
        listeAllerKlasseInSichtfeld-&gt;GetIrgendwas(); //erlaubt
        listeAllerKlasseInSichtfeld-&gt;SetIrgendwas(...); //Verboten
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1591489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591489</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 01 Oct 2008 13:09:16 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 14:13:32 GMT]]></title><description><![CDATA[<p>Genau das LordJaxom <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="😉"
    /><br />
Wie müssen dann die Setter aussehen dafür und vorallendingen wie initialisiere ich die? Mit NULL?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591525</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Wed, 01 Oct 2008 14:13:32 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 14:19:41 GMT]]></title><description><![CDATA[<p>Pille456 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Kann sein, dass das nicht geht, aber bei mir schluckt der Compiler dieses:</p>
<pre><code class="language-cpp">class MeineTolleKlasse;

class MeineTolleListe {
MeineTolleListe *next;
MeineTolleKlasse *klasse;
//Funktionen
};
</code></pre>
</blockquote>
<p>Ja, aber da handelt es sich auch um Zeiger, und nicht um Objekte der eigenen Klasse.</p>
<p>Pille456 schrieb:</p>
<blockquote>
<p>Wie müssen dann die Setter aussehen dafür und vorallendingen wie initialisiere ich die? Mit NULL?</p>
</blockquote>
<p>Setter nennt man die Memberfunktionen, deren Aufgabe im Schreibzugriff auf Member besteht. Funktionen kann man nicht initialisieren, schon gar nicht mit NULL (ich denke nicht, dass du rein virtuelle Methoden meinst, bei denen die Syntax einer Null-Initialisierung gleicht).</p>
<p>Wie wärs, wenn du die nicht erwünschten Methoden einfach gar nicht anbieten würdest? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1591530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591530</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 01 Oct 2008 14:19:41 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 14:26:39 GMT]]></title><description><![CDATA[<p>Ah sorry, da hatte ich mich total falsch ausgedrückt...<br />
Also ich brauche Setter um im Hauptprogramm die Eigenschaften zu ändern, daher muss ich sie implementieren.<br />
Nun haben ich eine Liste von Objekten in meiner Klasse. Die Klasse soll auf die Eigenschaften dieser Objekte(die in der Liste enthalten sind) nur lesenden Zugriff haben, d.h. es dürfen nur Getter aufgerufen werden, keine Setter.<br />
Das Hauptprogramm besitzt auch eine solche Liste, darf aber aus dieser Liste heraus auch die Setter-Funktionen aufrufen.</p>
<p>Das Initialisieren bezog ich in meinem post auf die Liste. Soll diese, für den Zugriff konstante(es dürfen keine Setter aufgerufen werden), aber an sich änderbare(die Liste kann sich ändern) Variable mit NULL initialisiert werden oder wie macht man das dann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591541</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Wed, 01 Oct 2008 14:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 14:40:43 GMT]]></title><description><![CDATA[<p>In diesem Falle sollte die Klasse (die nur lesenden Zugriff hat), eine Const-Referenz auf die Liste enthalten. Dann können nur mit <code>const</code> gekennzeichneten Funktionen aufgerufen werden (also die Getter). <code>main()</code> kriegt dann entweder die Liste selber oder eine normale Referenz darauf, sodass auch die Möglichkeit für schreibenden Zugriff besteht.</p>
<p>Edit: Reicht das so? Mehr kann ich momentan auch nicht sagen, da mir der Aufbau noch nicht ganz klar ist (wo ist z.B. die Liste definiert, wo die Objekte, und welche Zusammenhänge gibt es genau?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591549</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 01 Oct 2008 14:40:43 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 14:57:46 GMT]]></title><description><![CDATA[<p>Also in etwas sieht das so aus (Original hat dann irgendwie 5 Eigenschaften und um einiges mehr Funktionen):</p>
<pre><code class="language-cpp">class Objekte {
private:
int Eigenschaft1, Eigenschaft2;
const Liste *andereObjekte;

public:
void SetEigenschaft1(int pEigenschaft);
void SetEigenschaft2(int pEigenschaft); 
void SetListe(Liste *pListe);
int GetEigenschaft1() const; //so?
int GetEigenschaft1() const;
Liste* GetListe() const;

void Machwas();
Objekt(int pEigenschaft1, int pEigenschaft2); //Wie initialisiere ich nun &quot;andereObjekte&quot;?
};

/* andere Datei */
include &quot;Objekt.h&quot;

class Liste {
private: 
Liste *next;
Objekt *objekt;

public:
Liste* Next();
Objekt GetObjekt();
void AddObjekt(const Objekt &amp;pObjekt) const; //&lt;-- darf nur das Hauptprogramm 
void AddObjekt(Objekt *pObjekt); //kommt im Endeffekt auf dasselbe heraus, aber obere ist &quot;schöner&quot; oder? / im Oberen kann ist ja nur die übergeben Variable konstant, aber der Zugrif hinter nicht mehr oder?
//usw...
};

/* andere Datei */
int main() {
Liste *GesamteListe = ErstelleIrgendwieGesamteListe();
Objekt *EinObjekt = new (...);
EinObjekt-&gt;SetListe(ErstelleIrgendwieTeilliste(GesamteListe));
EinObjekt-&gt;machwas();
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1591569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591569</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Wed, 01 Oct 2008 14:57:46 GMT</pubDate></item><item><title><![CDATA[Reply to lesender Zugriff auf Objekt in Klasse on Wed, 01 Oct 2008 15:13:07 GMT]]></title><description><![CDATA[<p>Pille456 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int GetEigenschaft1() const; //so?
</code></pre>
</blockquote>
<p>Ja, so ist die Funktion konstant, kann also nichts an der Klasse ändern (von Mutables mal abgesehen).</p>
<p>Pille456 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Objekt(int pEigenschaft1, int pEigenschaft2); //Wie initialisiere ich nun &quot;andereObjekte&quot;?
</code></pre>
</blockquote>
<p>Am besten per Initialisierungsliste:</p>
<pre><code class="language-cpp">Objekt(int pEigenschaft1, int pEigenschaft2)
: andereObjekte(HierWäreAndereObjekte)
{

}
</code></pre>
<p>Pille456 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void AddObjekt(const Objekt &amp;pObjekt) const; //&lt;-- darf nur das Hauptprogramm
</code></pre>
</blockquote>
<p>Aber die Funktion darf nicht <code>const</code> sein, weil du ja etwas an der Klasse änderst.</p>
<p>Pille456 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void AddObjekt(Objekt *pObjekt); //kommt im Endeffekt auf dasselbe heraus, aber obere ist &quot;schöner&quot; oder? 
// im Oberen kann ist ja nur die übergeben Variable konstant, aber der Zugrif hinter nicht mehr oder?
</code></pre>
</blockquote>
<p>Vielleicht solltest du dich noch ein bisschen mehr in Referenzen einlesen. Bei Parameterübergaben sind sie grundsätzlich Zeigern vorzuziehen, wo möglich. Eine Referenz selber ist <strong>immer</strong> konstant, das referenzierte Objekt je nach Angabe. Bei Zeigern verhält es sich folgendermassen:</p>
<pre><code class="language-cpp">const int* a;  // Zeiger auf const int (a ist veränderbar, *a nicht)
int const* b;  // wie oben
int* const c;  // konstanter Zeiger auf int (*c ist veränderbar, c nicht)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1591581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591581</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 01 Oct 2008 15:13:07 GMT</pubDate></item></channel></rss>