<?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[Design Frage -&amp;gt; Member- oder nicht Memberfunktion]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Es gibt ja verschiedene Leute, welche die Meinung vertreten, dass Funktionen, welche als nicht Memberfunktionen realisiert werden können, auch ausserhalb der Klasse realisiert werden sollten.</p>
<p>Ich frage mich gerade, wie weit sowas gehen sollte. Ich habe hier einen kleinen Code, welcher eine Rechteck-Klasse beschreibt. Ich bin gerade dabei, den Code zu überarbeiten und lagere momentan fast alle Funktionen aus. Es kommt mir auch irgendwie besser vor, aber dann hat mich doch plötzlich ein wenig der Zweifel gepackt. Ich schreib das mal schnell auf:</p>
<pre><code class="language-cpp">//////////////////////////////////////////////////////////////////////////
// Rect

class Rect
{
  // Attributes //
private:
  Coord m_topLeft; // Coord ist einfach ein Punkt (x,y).

  int m_width;
  int m_heigth;

  // Constructors &amp; Destructor //
public:
  Rect(int x, int y, int width, int height);
  Rect(Coord const&amp; topLeft, int width, int height);
  Rect(Coord const&amp; topLeft, Coord const&amp; bottomRight);
  Rect(Rect const&amp; rect);

  ~Rect();

  // Operators //
public:
  Rect&amp; operator =(Rect const&amp; rect);
  bool operator ==(Rect const&amp; rect) const;
  bool operator !=(Rect const&amp; rect) const;

	// Methods //
public:
  Coord const&amp; get_top_left() const;
  void set_top_left(Coord const&amp; topLeft);

  int get_width() const;
  void set_width(int width);

  int get_height() const;
  void set_height(int height);
};

//////////////////////////////////////////////////////////////////////////
// Global Enums

enum Relation
{
  NONE,
  INTERSECTION,
  PARENT,
  CHILD
};

// Um die nachfolgenden Funktionen geht es.
// Diese Funktionen waren vorhin alles Methoden.
// Man kann sie aber genauso ausserhalb hinschreiben.

//////////////////////////////////////////////////////////////////////////
// Global functions

Coord calc_top_right(Rect const&amp; rect);     // War früher get...
Coord calc_bottom_right(Rect const&amp; rect);  // War früher get...
Coord calc_bottom_left(Rect const&amp; rect);   // War früher get...

bool has_intersection(Rect const&amp; first, Rect const&amp; second);
Relation detect_relation(Rect const&amp; first, Rect const&amp; second);

bool is_element_of(Coord const&amp; coord, Rect const&amp; rect);
</code></pre>
<p>Ich bin gespannt auf eure Meinungen. Wo sollten diese Funktionen hin?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221804/design-frage-gt-member-oder-nicht-memberfunktion</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 11:48:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221804.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Sep 2008 17:32:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 17:32:01 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Es gibt ja verschiedene Leute, welche die Meinung vertreten, dass Funktionen, welche als nicht Memberfunktionen realisiert werden können, auch ausserhalb der Klasse realisiert werden sollten.</p>
<p>Ich frage mich gerade, wie weit sowas gehen sollte. Ich habe hier einen kleinen Code, welcher eine Rechteck-Klasse beschreibt. Ich bin gerade dabei, den Code zu überarbeiten und lagere momentan fast alle Funktionen aus. Es kommt mir auch irgendwie besser vor, aber dann hat mich doch plötzlich ein wenig der Zweifel gepackt. Ich schreib das mal schnell auf:</p>
<pre><code class="language-cpp">//////////////////////////////////////////////////////////////////////////
// Rect

class Rect
{
  // Attributes //
private:
  Coord m_topLeft; // Coord ist einfach ein Punkt (x,y).

  int m_width;
  int m_heigth;

  // Constructors &amp; Destructor //
public:
  Rect(int x, int y, int width, int height);
  Rect(Coord const&amp; topLeft, int width, int height);
  Rect(Coord const&amp; topLeft, Coord const&amp; bottomRight);
  Rect(Rect const&amp; rect);

  ~Rect();

  // Operators //
public:
  Rect&amp; operator =(Rect const&amp; rect);
  bool operator ==(Rect const&amp; rect) const;
  bool operator !=(Rect const&amp; rect) const;

	// Methods //
public:
  Coord const&amp; get_top_left() const;
  void set_top_left(Coord const&amp; topLeft);

  int get_width() const;
  void set_width(int width);

  int get_height() const;
  void set_height(int height);
};

//////////////////////////////////////////////////////////////////////////
// Global Enums

enum Relation
{
  NONE,
  INTERSECTION,
  PARENT,
  CHILD
};

// Um die nachfolgenden Funktionen geht es.
// Diese Funktionen waren vorhin alles Methoden.
// Man kann sie aber genauso ausserhalb hinschreiben.

//////////////////////////////////////////////////////////////////////////
// Global functions

Coord calc_top_right(Rect const&amp; rect);     // War früher get...
Coord calc_bottom_right(Rect const&amp; rect);  // War früher get...
Coord calc_bottom_left(Rect const&amp; rect);   // War früher get...

bool has_intersection(Rect const&amp; first, Rect const&amp; second);
Relation detect_relation(Rect const&amp; first, Rect const&amp; second);

bool is_element_of(Coord const&amp; coord, Rect const&amp; rect);
</code></pre>
<p>Ich bin gespannt auf eure Meinungen. Wo sollten diese Funktionen hin?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576040</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 03 Sep 2008 17:32:01 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 18:06:44 GMT]]></title><description><![CDATA[<p>Die top/bottom... auf jeden fall rein. Wenn es bei intersection usw. bei Rect bleibt, dann würde ich sie auch rein machen. Wenn du ne große Mathelib für alle möglichen Flächen bauen willst, dann in diese.<br />
<a href="http://doc.trolltech.com/4.4/qrect.html" rel="nofollow">http://doc.trolltech.com/4.4/qrect.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576048</guid><dc:creator><![CDATA[look@qt]]></dc:creator><pubDate>Wed, 03 Sep 2008 18:06:44 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 18:22:07 GMT]]></title><description><![CDATA[<p>alles non member und operator== und co auch gleich non member.</p>
<p>waere es uU sinnvoller in der Shape Klasse nur den Mittelpunkt zu speichern und anhand dessen die ecken bestimmen zu koennen?</p>
<p>weil aktuell ists doof: top_left ist member, aber top_right nicht und heisst auch komplett anders. das interface muss schon einheitlich sein...</p>
<p>wenn du topleft als punkt weiter speichern willst, dann mach noch eine freie calc_top_left funktion dazu, um das interface einheitlicher zu gestalten.</p>
<p>non member bringen dir hier einen enormen vorteil wenn du mal mehr klassen hast: calc_top_right() kann fuer alle Shapes funktionieren die ein get_width() anbieten - ohne dass du neuen code schreiben musst - einfach nur calc_top_right als template funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576054</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 03 Sep 2008 18:22:07 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 18:36:54 GMT]]></title><description><![CDATA[<p>Mach sie doch als statische Methoden. Wegen der Kapselung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576067</guid><dc:creator><![CDATA[Chuck]]></dc:creator><pubDate>Wed, 03 Sep 2008 18:36:54 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 18:49:24 GMT]]></title><description><![CDATA[<p>Chuck schrieb:</p>
<blockquote>
<p>Mach sie doch als statische Methoden. Wegen der Kapselung.</p>
</blockquote>
<p>nein nein nein nein nein nein<br />
das ist schlecht fuer die kapselung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576076</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 03 Sep 2008 18:49:24 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 18:55:13 GMT]]></title><description><![CDATA[<p>Aha, okay.</p>
<p>Dann klär mich auf. Wieso?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576082</guid><dc:creator><![CDATA[Chuck]]></dc:creator><pubDate>Wed, 03 Sep 2008 18:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 18:57:39 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Coord calc_top_right(Rect const&amp; rect);     // War früher get...
Coord calc_bottom_right(Rect const&amp; rect);  // War früher get...
Coord calc_bottom_left(Rect const&amp; rect);   // War früher get...
</code></pre>
<p>Memberfunktionen mit get_..., wegen Einheitlichkeit und Lesbarkeit</p>
<pre><code class="language-cpp">bool has_intersection(Rect const&amp; first, Rect const&amp; second);
</code></pre>
<p>Kommt drauf an. Wenn du die <code>has_intersection</code> -Funktion noch für mehrere andere Formen überladen hast, würde ich sie draußen lassen. Wenn's die so erstmal nur für <code>Rect</code> gibt, würde ich sie mit reinnehmen.</p>
<pre><code class="language-cpp">Relation detect_relation(Rect const&amp; first, Rect const&amp; second);
</code></pre>
<p>Wie bei <code>has_intersection</code> .</p>
<pre><code class="language-cpp">bool is_element_of(Coord const&amp; coord, Rect const&amp; rect);
</code></pre>
<p><code>bool Rect::contains( Coord const&amp; )</code> fände ich besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576083</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 03 Sep 2008 18:57:39 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 19:00:59 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>alles non member und operator== und co auch gleich non member.</p>
</blockquote>
<p>Keine Ahnung, was der op== und != in der Klasse macht. Den habe ich normalerweise immer draussen. Ist auch bei Coord draussen. Also ka ^^</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>waere es uU sinnvoller in der Shape Klasse nur den Mittelpunkt zu speichern und anhand dessen die ecken bestimmen zu koennen?</p>
</blockquote>
<p>Das wäre sicher sinnvoll, wenn ich mehrere verschiedene Shapes habe. Ich habe aber nur Rechtecke, bzw. eigentlich Regionen, welche aber immer rechteckig sind, und Punkte.</p>
<p>Aber mit weiteren Shapes, würde ich dir wahrscheinlich zustimmen.</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>non member bringen dir hier einen enormen vorteil wenn du mal mehr klassen hast: calc_top_right() kann fuer alle Shapes funktionieren die ein get_width() anbieten - ohne dass du neuen code schreiben musst - einfach nur calc_top_right als template funktion.</p>
</blockquote>
<p>Naja, wenn ... derzeit aber definitiv nicht in Sicht. Allerdings, wer weiss was die Zukunft bringt <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>
<p>Ich bin gespannt auf weitere Meinungen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576086</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 03 Sep 2008 19:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 19:24:00 GMT]]></title><description><![CDATA[<p>Aha. Ich raff grad nur wenig.</p>
<p>Ich dachte immer, wenn eine Instanz benötigt wird, dann rein in die Klasse.<br />
Wenn nicht, statisch und wenns noch andere Instanzen gebraucht werden, man also<br />
nicht weiß, zu welcher Klasse es gehört, dann global oder besser Namespace.</p>
<p>\edit: Beim Vererben bringt das doch auch mehr Übersicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576088</guid><dc:creator><![CDATA[Chuck]]></dc:creator><pubDate>Wed, 03 Sep 2008 19:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 19:17:43 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>non member bringen dir hier einen enormen vorteil wenn du mal mehr klassen hast: calc_top_right() kann fuer alle Shapes funktionieren die ein get_width() anbieten - ohne dass du neuen code schreiben musst - einfach nur calc_top_right als template funktion.</p>
</blockquote>
<p>Für welches Shape würde calc_bottom_right noch funktionieren und wirklich den bottom_right Punkt des Shapes und nicht der Boundingbox liefern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576093</guid><dc:creator><![CDATA[hmm???]]></dc:creator><pubDate>Wed, 03 Sep 2008 19:17:43 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 19:31:34 GMT]]></title><description><![CDATA[<p>Nein, alles was geht raus aus der Klasse.<br />
Siehe zB monoliths unstrung von Sutter, zB online: <a href="http://www.gotw.ca/gotw/084.htm" rel="nofollow">http://www.gotw.ca/gotw/084.htm</a> oder in Effective C++ Style.<br />
Oder auch Meyers: <a href="http://www.ddj.com/cpp/184401197" rel="nofollow">http://www.ddj.com/cpp/184401197</a></p>
<p>Alles was ich ausserhalb der Klasse habe, kann ich wiederverwenden. Generell ist eine foo.bar() Syntax furchtbar restriktiv.</p>
<p>Wenn nun calc_top_right() non member ist, dann habe ich es automatisch fuer jedes Shape dass ein get_width() anbietet. ohne aufwand, einfach durch statische polymorphie.</p>
<p>Die gleiche funktionalitaet koennte man erreichen indem man alles Shapes von einer abstrakten Klasse Shape ableitet und dort calc_top_right() implementiert.</p>
<p>Aber ploetzlich sind wir von Shape abhaengig. Wenn ich jetzt ein calc_middle() will um den mittelpunkt zu bestimmen und der Designer von Shape hat daran nicht gedacht, dann pech gehabt.</p>
<p>Hier kommen eben non member ins Spiel. Ich kann jederzeit eine calc_middle() funktion implementieren die fuer alle Shapes funktioniert. Und Shapes sind alles was ein get_width() und get_height() anbietet. Ich brauche kleine laufzeit polymorphie.</p>
<p>Wir haben damit eine Moeglichkeit bestehende Klassen ohne vererbung zu erweitern. denn vererbung nur um funktionalitaet hinzuzufuegen ist boese.</p>
<p>Wenn wir das in der STL zb gemacht haetten, dann koennte ich<br />
sort(container);<br />
sagen um jeden beliebigen container zu sortieren.</p>
<p>Was dazu fuehrt, dass wir ploetzlich generischen Code viel einfacher schreiben koennen, weil man viel weniger spezialisieren muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576098</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 03 Sep 2008 19:31:34 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 07:47:22 GMT]]></title><description><![CDATA[<p>Ich verstehe langsam, was du meinst und es macht auch alles Sinn.</p>
<p>Aber dieses</p>
<blockquote>
<p>ohne aufwand, einfach durch statische polymorphie</p>
</blockquote>
<p>versteh ich nicht.<br />
Wie soll die Funktion auf einmal andere Formen aufnehmen, statt nur dem Rechteck.<br />
Dafür muss man sie doch von einer Basisklasse ableiten oder?</p>
<blockquote>
<p>Die gleiche funktionalitaet koennte man erreichen indem man alles Shapes von einer abstrakten Klasse Shape ableitet und dort calc_top_right() implementiert.</p>
</blockquote>
<p>Und da dachte ich, das wäre das Standardkonzept, wie es in jedem Buch steht. So kann man sich irren. Aber man lernt ja nie aus.</p>
<p>\edit: ja durch Templates. Ist mir noch vorm Einschlafen eingefallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576151</guid><dc:creator><![CDATA[Chuck]]></dc:creator><pubDate>Thu, 04 Sep 2008 07:47:22 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Wed, 03 Sep 2008 22:19:43 GMT]]></title><description><![CDATA[<p>Chuck schrieb:</p>
<blockquote>
<blockquote>
<p>ohne aufwand, einfach durch statische polymorphie</p>
</blockquote>
<p>versteh ich nicht.<br />
Wie soll die Funktion auf einmal andere Formen aufnehmen, statt nur dem Rechteck.<br />
Dafür muss man sie doch von einer Basisklasse ableiten oder?</p>
</blockquote>
<p>Durch Templates:</p>
<pre><code class="language-cpp">template&lt;typename ValueT&gt;
Coord calc_top_right(ValueT const&amp; value);
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576177</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 03 Sep 2008 22:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 08:01:59 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Nein, alles was geht raus aus der Klasse.<br />
Siehe zB monoliths unstrung von Sutter, zB online: <a href="http://www.gotw.ca/gotw/084.htm" rel="nofollow">http://www.gotw.ca/gotw/084.htm</a> oder in Effective C++ Style.<br />
Oder auch Meyers: <a href="http://www.ddj.com/cpp/184401197" rel="nofollow">http://www.ddj.com/cpp/184401197</a></p>
</blockquote>
<p>Grundsätzlich ist es mit klar, wieso man freie Funktionen Memberfunktionen vorziehen sollte.<br />
Nun habe ich mir mal Deinen ersten <a href="http://www.gotw.ca/gotw/084.htm" rel="nofollow">Link</a> angesehen, und dabei sind mir dann aber Zweifel gekommen.<br />
Herb Sutter zieht da ja jede Menge Funktionen aus basic_string heraus und spricht an, dass die meisten der Funktionen sich auch auf andere STL-Container anwenden lassen würden.<br />
Wenn ich mir aber jetzt sowas wie seine empty()-Templatefunktion ansehe:</p>
<pre><code class="language-cpp">template&lt;class charT, class traits, class Allocator&gt;
bool empty( const basic_string&lt;charT, traits, Allocator&gt;&amp; s )
{
  return s.size() == 0;
}
</code></pre>
<p>dann ist dieses in der Form doch wieder nur für basic_string zu benutzen, oder?<br />
Für die verschiedenen anderen Container müsste ich dann wieder andere Versionen anbieten. Wo ist also der Vorteil?</p>
<p>Ich würde das (vermutlich naiv) eher so machen:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
bool empty(const T&amp; c)
{
    return c.size() == 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1576285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576285</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 04 Sep 2008 08:01:59 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 09:27:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Grundsätzlich ist es mit klar, wieso man freie Funktionen Memberfunktionen vorziehen sollte.</p>
</blockquote>
<p>Oftmals macht auch beides sinn ...<br />
eine freie &lt;template&gt; Version die mit aehnlichen klassen auch funktioniert, und eine gebundene interne, die auf grund internas effizienter implementiert werden kann.</p>
<p>Ansonsten wuerd ich mich Shade Of Mine anschliessen. Vor allen den &quot;interfaces&quot; nen einheitliches Gesicht verpassen. Das dankt dir spaeter der, der den code warten muss. und schoen in mindestens nen namespace kapseln ...</p>
<p>Wenn man erst mal ne generische funktion hat, kann man spaeter bei der optimierung immer noch gebundene interne versionen bauen und auf die umsteigen, wenn das moeglich/ notwendig ist.</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576333</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Thu, 04 Sep 2008 09:27:00 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 09:36:56 GMT]]></title><description><![CDATA[<p>poasting in a design discussion thread.</p>
<p>lohnt es sich noch bier kalt zustellen und knabberkram zu kaufen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576343</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Thu, 04 Sep 2008 09:36:56 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 10:39:08 GMT]]></title><description><![CDATA[<p>sothis_ schrieb:</p>
<blockquote>
<p>lohnt es sich noch bier kalt zustellen und knabberkram zu kaufen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /></p>
</blockquote>
<p>1. Das ist grundsätzlich der erste Trollpost.<br />
2. Nein, gibt keinen Grund, kannst also ruhig wieder gehen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4826">@Rest</a>,<br />
Bis jetzt eigentlich keine Antworten gegen dieses Vorgehen. Meine Zweifel haben sich verflüchtigt <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="🙂"
    /><br />
Um die Klasse Rect gibt es übrigens einen namespace und somit auch um die Funktionen. Ich sollte vielleicht mal die Dokumentation umbennen von Global zu Free functions oder sowas ähnliches.</p>
<p>Jetzt habe ich womöglich noch ein anderes Designproblem. Aber dazu mache ich einen neuen Thread auf, sobald ich mich nochmals selber damit gründlich beschäftigt habe.</p>
<p>Danke!</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576360</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 04 Sep 2008 10:39:08 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 10:57:24 GMT]]></title><description><![CDATA[<p>Trotzdem würde ich gerne meine Frage beantwortet haben. Auch wenn sie sich eher direkt auf die Ausführungen von Herb Sutter aus Shades Link bezieht.</p>
<p>Mir ist irgendwie nicht klar, wo der Vorteil ist, wenn die Funktionen frei sind, wenn sich eh nur basic_string mit ihnen benutzen lässt. Sind die Beispiele evtl. nur schlecht gewählt?</p>
<p>Wenn ich für alle Container die Funktionen wieder explizit überladen muss, kann ich sie doch eigentlich auch gleich wieder in die Klasse packen, oder?<br />
Mir würde sich die Frage nicht stellen, wenn er (Sutter) generellere Funktionen aufgeführt hätte, wie ich sie oben im Beispiel genannte habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576371</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 04 Sep 2008 10:57:24 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 13:04:20 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Trotzdem würde ich gerne meine Frage beantwortet haben. Auch wenn sie sich eher direkt auf die Ausführungen von Herb Sutter aus Shades Link bezieht.</p>
</blockquote>
<p>Sutter geht in dem Link eben auf string ein.<br />
Wenn man das ganze natuerlich fuer alle Container will, dann ist ein</p>
<pre><code class="language-cpp">template&lt;typename ContainerT&gt;
bool empty(ContainerT const&amp; cont) {
  return cont.size()==0;
}
</code></pre>
<p>notwendig.</p>
<p>PS:<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17587">@sothis_</a>:<br />
Du koenntest hier ruhig mal etwas lernen und weniger trollposts machen. Wegen Leuten wie dir frage ich mich manchmal, warum ich das hier ueberhaupt mache. Kotzt mich an, echt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576478</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 04 Sep 2008 13:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 13:50:22 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Sutter geht in dem Link eben auf string ein.<br />
Wenn man das ganze natuerlich fuer alle Container will, dann ist ein...</p>
</blockquote>
<p>Wo ist denn der Sinn, freie Funktionen für etwas zu definieren, was man ohnehin nur für einen Spezialfall benutzen kann? Ist das Beispiel nur schlecht gewählt? Mir ist das irgendwie nicht so recht klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576493</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 04 Sep 2008 13:50:22 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 15:57:45 GMT]]></title><description><![CDATA[<p>SO weit ich das verstanden habe, geht es darum, die Kapselung soweit wie<br />
möglich zu erhalten.</p>
<p>Und wenn ich mit 3 Methoden <strong>alles</strong> realisieren könnte, was mit dieser<br />
Klasse machbar sein muss, dann können alle anderen freie Funktion werden, da<br />
diese nur die 3 Methoden benötigen.</p>
<p>Laut Sutter gibts keine Performance-Einschränkungen und wenn mal was erweitert<br />
werden <strong>müsste</strong> ist die ein leichteres, da man keine großartige<br />
Klassenhierarchie verwenden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576620</guid><dc:creator><![CDATA[Chuck]]></dc:creator><pubDate>Thu, 04 Sep 2008 15:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 16:31:43 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17587">@sothis_</a>:<br />
Du koenntest hier ruhig mal etwas lernen und weniger trollposts machen. Wegen Leuten wie dir frage ich mich manchmal, warum ich das hier ueberhaupt mache. Kotzt mich an, echt.</p>
</blockquote>
<p>jetzt überreagiere doch nicht so. ist ja eine sehr angespannte stimmmung hier, dann geh ich halt wieder <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/1576624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576624</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Thu, 04 Sep 2008 16:31:43 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 16:55:22 GMT]]></title><description><![CDATA[<p>Chuck schrieb:</p>
<blockquote>
<p>SO weit ich das verstanden habe, geht es darum, die Kapselung soweit wie<br />
möglich zu erhalten.</p>
<p>Und wenn ich mit 3 Methoden <strong>alles</strong> realisieren könnte, was mit dieser<br />
Klasse machbar sein muss, dann können alle anderen freie Funktion werden, da[...]</p>
</blockquote>
<p>Ja, das ist soweit schon klar, ich hänge mich allerdings (vielleicht zu sehr) an seinem Beispiel auf.<br />
Das Interface der freien Funktionen ist ja nun direkt auf basic_string zugeschnitten. Da lässt sich (zumindest aus meiner sicht) nicht mehr allzu viel erweitern. Aber vielleicht verstehe ich auch nur was nicht richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576643</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 04 Sep 2008 16:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 17:24:25 GMT]]></title><description><![CDATA[<p>was sich mir als Frage zum zweiten Text stellt:<br />
Was haben friend Funktionen für einen Vorteil gegenüber Membern?(Ich ziele da auf den Algorithmus zu Beginn des Textes ab)<br />
Ich habe das Argument mit der Kapselung verstanden und auch dass das Interface dadurch teilbarer wird, aber ist eine Friendfunktion nicht auch in einem gewissen Maße irreführend?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576655</guid><dc:creator><![CDATA[JustAnotherNoob]]></dc:creator><pubDate>Thu, 04 Sep 2008 17:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 17:51:30 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Sutter geht in dem Link eben auf string ein.<br />
Wenn man das ganze natuerlich fuer alle Container will, dann ist ein...</p>
</blockquote>
<p>Wo ist denn der Sinn, freie Funktionen für etwas zu definieren, was man ohnehin nur für einen Spezialfall benutzen kann? Ist das Beispiel nur schlecht gewählt? Mir ist das irgendwie nicht so recht klar.</p>
</blockquote>
<p>Sutter hat sich dort nur gerade auf die Strings konzentriert, da er schaute, welche Funktionen man rausnehmen kann. Und wahrscheinlich um den Leser nicht zu sehr zu verwirren, hat er es derzeit bei dem basic_string gelassen.</p>
<p>Also ist das Beispiel vielleicht etwas schlecht gewählt, zufrieden? Wie kann man so ein Drama, um so etwas simples machen. Du solltest den Beruf Unternehmensberatung anstreben :p</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18794">@JustAnotherNoob</a>,<br />
Wenn ich dich richtig verstehe, fragst du, wieso eine Friendfunktion einer Membermethode bevorzugt werden sollte?<br />
Ich zitiere mal direkt Sutter, aus dem ersten Text:</p>
<blockquote>
<p>(There are some rare exceptions such as operations needing conversions on their left-hand arguments and some like operator&lt;&lt;() whose signatures don't allow the *this reference to be their first parameters; even these can normally be nonfriends implemented in terms of (possibly virtual) members, but sometimes doing that is merely an exercise in contortionism and they're best and naturally expressed as friends.)</p>
</blockquote>
<p>Oder dann habe ich nicht verstanden was du meinst.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576676</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 04 Sep 2008 17:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to Design Frage -&amp;gt; Member- oder nicht Memberfunktion on Thu, 04 Sep 2008 18:11:20 GMT]]></title><description><![CDATA[<p>Und was ist mit Information hiding? Warum weiß eine globale Funktion wie man an die Eckpunkte eines Rechtecks kommt? Sowas weiß das Rechteck und sonst keiner. Was würde den passieren, wenn man das Rechteck auch drehen können will und es dann nicht mehr parallel zu den Achsen liegt? Dann würde die globale Funktion was falsches berechnen und müsste geändert werden. Das hätte zu Folge das sie für andere Shapes nicht mehr funktioniert. Welche anderen Shapes diese Funktionen überhaupt noch nutzen könnten hat sowieso noch keiner gesagt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576691</guid><dc:creator><![CDATA[hmmm???]]></dc:creator><pubDate>Thu, 04 Sep 2008 18:11:20 GMT</pubDate></item></channel></rss>