<?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[schreibgeschützte member oder properties]]></title><description><![CDATA[<p>Hi,</p>
<p>wie kann man in einer C++ klasse properties simulieren ausser mit public members? Optimal wären read only member.</p>
<p>Vermutlich kann man es nur mit GetMethoden regeln.<br />
GetVar1()<br />
GetVar2()</p>
<p>Sehr ärgerlich ...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/165628/schreibgeschützte-member-oder-properties</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 01:24:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165628.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Nov 2006 17:28:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to schreibgeschützte member oder properties on Tue, 21 Nov 2006 17:28:13 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>wie kann man in einer C++ klasse properties simulieren ausser mit public members? Optimal wären read only member.</p>
<p>Vermutlich kann man es nur mit GetMethoden regeln.<br />
GetVar1()<br />
GetVar2()</p>
<p>Sehr ärgerlich ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178710</guid><dc:creator><![CDATA[CPP_coder]]></dc:creator><pubDate>Tue, 21 Nov 2006 17:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to schreibgeschützte member oder properties on Tue, 21 Nov 2006 19:57:00 GMT]]></title><description><![CDATA[<p>es gibt ein paar libs, die das ganze etwas angenehmer emulieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178776</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Tue, 21 Nov 2006 19:57:00 GMT</pubDate></item><item><title><![CDATA[Reply to schreibgeschützte member oder properties on Tue, 21 Nov 2006 19:57:18 GMT]]></title><description><![CDATA[<p>Vermisse sowas auch, gibts leider nur in C# <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Aber gibt ne etwas dreckige Methode um das hinzubiegen: Deklarier deine Variablen als const und public. Intern <em>in deinem Klassencode</em> castest du den Variablen für ihre Benutzung das const weg...<br />
Musste halt nur ausreichend testen... Aber dann kann jeder Read-Only auf deine Vars zugreifen (solange der Nutzer nicht auch castet :D)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178777</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 21 Nov 2006 19:57:18 GMT</pubDate></item><item><title><![CDATA[Reply to schreibgeschützte member oder properties on Tue, 21 Nov 2006 20:03:08 GMT]]></title><description><![CDATA[<p>bestimmt kann man auch was mit überladenen operatoren tricksen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178780</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 21 Nov 2006 20:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to schreibgeschützte member oder properties on Tue, 21 Nov 2006 20:05:56 GMT]]></title><description><![CDATA[<p>...oder mit proxyklassen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178783</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 21 Nov 2006 20:05:56 GMT</pubDate></item><item><title><![CDATA[Reply to schreibgeschützte member oder properties on Tue, 21 Nov 2006 20:15:46 GMT]]></title><description><![CDATA[<p>Goooogst du <a href="http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4031/" rel="nofollow">hier</a> oder <a href="http://www.codeproject.com/library/cpp_object_properties.asp" rel="nofollow">hier</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178790</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Tue, 21 Nov 2006 20:15:46 GMT</pubDate></item><item><title><![CDATA[Reply to schreibgeschützte member oder properties on Wed, 22 Nov 2006 08:45:55 GMT]]></title><description><![CDATA[<p>CPP_coder schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>wie kann man in einer C++ klasse properties simulieren ausser mit public members? Optimal wären read only member.</p>
<p>Vermutlich kann man es nur mit GetMethoden regeln.<br />
GetVar1()<br />
GetVar2()</p>
<p>Sehr ärgerlich ...</p>
</blockquote>
<p>Es ist lediglich ein wenig umständlicher aber nicht sehr ärgerlich. Das ist aber genau die Methode, wie man read-only-member macht. Ich mache meine Member-Variablen grundsätzlich private und implementiere getter- und setter-Methoden nach Bedarf. Etwa so:</p>
<pre><code class="language-cpp">class MyClass
{
    int a; // diese soll von aussen nur lesbar sein
    int b; // dies soll eine öffentliche Property sein
  public:
    int getA() const  { return a; }
    int getB() const  { return b; }
    void setB(int value)  { b = value; }
};
</code></pre>
<p>Ich finde es persönlich lesbarer und klarer als so ein Property-template. Das Tamplate (aus <a href="http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4031/" rel="nofollow">http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4031/</a>) ist zwar trickreich und sieht gut aus, aber es fördert meiner Meinung nach nicht die Lesbarkeit und Einfachheit des Codes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178989</guid><dc:creator><![CDATA[ich2]]></dc:creator><pubDate>Wed, 22 Nov 2006 08:45:55 GMT</pubDate></item><item><title><![CDATA[Reply to schreibgeschützte member oder properties on Wed, 22 Nov 2006 11:59:05 GMT]]></title><description><![CDATA[<p>Außerdem macht es die Klasse um einiges größer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> , was ja nicht unbedingt sofort ersichtlich ist! Deshalb sollte man es nicht generell überall einsetzen... Jedenfalls nicht, wenn dabei die Größe eine Rolle spielt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1179161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1179161</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 22 Nov 2006 11:59:05 GMT</pubDate></item><item><title><![CDATA[Reply to schreibgeschützte member oder properties on Thu, 23 Nov 2006 14:33:27 GMT]]></title><description><![CDATA[<p>Hier mal ein Ansatz von mir selbst (da man bei den beiden Links die Member-Variable und die Getter/Setter noch selbst implementieren muß):</p>
<pre><code class="language-cpp">#ifndef PROPERTY_H
#define PROPERTY_H

template&lt;typename T&gt; class property_wrapper
{
public:
	explicit property_wrapper(const T&amp; t)
		: _t(t)
	{}

	operator T() const { return _t; }

private:
	const T&amp; _t;
};

template&lt;typename T&gt; class property_readonly
{
public:
	property_readonly()
	{}
	property_readonly(const T&amp; t)
		: _t(t)
	{}

	const T&amp; get() const { return _t; }

	const T&amp; operator () () const { return _t; }

	operator T() const { return _t; }

	T&amp; operator = (const property_wrapper&lt;T&gt;&amp; t) { return _t = t; }

protected:
	void set(const T&amp; t) { _t = t; }

	const T&amp; operator = (const T&amp; t) { _t = t; return t; }
	const T&amp; operator ()(const T&amp; t) { _t = t; return t; }

	const T&amp; operator += (const T&amp; t) { _t += t; return _t; }
	const T&amp; operator -= (const T&amp; t) { _t -= t; return _t; }

private:
	T _t;
};

template&lt;typename T&gt; class property
{
public:
	property()
	{}
	property(const T&amp; t)
		: _t(t)
	{}

	const T&amp; get() const { return _t; }
	void set(const T&amp; t) { _t = t; }

	const T&amp; operator = (const T&amp; t) { _t = t; return t; }
	const T&amp; operator += (const T&amp; t) { _t += t; return _t; }
	const T&amp; operator -= (const T&amp; t) { _t -= t; return _t; }

	const T&amp; operator () () const { return _t; }
	const T&amp; operator () (const T&amp; t) { _t = t; return t; }

	operator T() const { return _t; }

private:
	T _t;
};

#endif
</code></pre>
<p>Diese Template-Klasse kapselt einfach einen Datenwert und liefert entsprechende Operatoren dafür mit.</p>
<p>Benutzung dann z.B. folgendermaßen (Auszug aus einem kleinen Spiel von mir):</p>
<pre><code class="language-cpp">class Player
{
public:
  typedef property_readonly&lt;int&gt; INT;
  typedef property_readonly&lt;bool&gt; BOOL;

  INT Gold;
  INT Ritter;
  INT Proviant;

  BOOL Drachenschwert;
  BOOL Pegasus;

  BOOL Kundschafter;
  BOOL Wunderheiler;
  BOOL Koloss;
}
</code></pre>
<p>Von außen sind dies dann alles read-only Properties, aber in meiner Klassendefinition kann ich dann mittels des 'property_wrapper' die Werte dann doch verändern (entspricht also dem const_cast).</p>
<p>Und demnächst gibt es dann hier noch die fortschrittlichere Variante mit eigener Set-Methode... (wenn Interesse daran besteht -)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1180043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1180043</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 23 Nov 2006 14:33:27 GMT</pubDate></item></channel></rss>