<?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 - Beste Möglichkeit konstante Eigenschaft zuzuweisen]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich sehe zwei Möglichkeiten einer Unterklasse eine (konstante) Eigenschaft zu geben:</p>
<p>Hier ein Beispiel das meine Frage verdeutlicht:</p>
<p>1. Möglichkeit:</p>
<pre><code>class Basis {
public:
	const char typ;
	Basis(char _typ = 0) : typ(_typ) {}; // typ wird auf 0 gesetzt
// ...
}

class Kind {
public:
	Kind() : Basis(1) {}; // typ wird auf 1 gesetzt
// ...
</code></pre>
<p>Den Typen erhält man nun per kindObjekt.typ</p>
<p>Die alternative dazu wäre Folgendes (2. Möglichkeit):</p>
<pre><code>class Basis {
public:
	virtual char typ() { return 0; };
// ...
}

class Kind {
public:
	virtual char typ() { return 1; };
// ...
</code></pre>
<p>Hier erhält man den Typen über kindObjekt.typ().</p>
<p>Also: Konstante Vorbelegung in der Basisklasse gegen virtuelle Funktion.<br />
Was ist a) sauberer?<br />
Und was ist b) schneller?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270746/vererbung-beste-möglichkeit-konstante-eigenschaft-zuzuweisen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 23:10:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270746.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Jul 2010 14:51:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung - Beste Möglichkeit konstante Eigenschaft zuzuweisen on Sat, 17 Jul 2010 14:51:17 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich sehe zwei Möglichkeiten einer Unterklasse eine (konstante) Eigenschaft zu geben:</p>
<p>Hier ein Beispiel das meine Frage verdeutlicht:</p>
<p>1. Möglichkeit:</p>
<pre><code>class Basis {
public:
	const char typ;
	Basis(char _typ = 0) : typ(_typ) {}; // typ wird auf 0 gesetzt
// ...
}

class Kind {
public:
	Kind() : Basis(1) {}; // typ wird auf 1 gesetzt
// ...
</code></pre>
<p>Den Typen erhält man nun per kindObjekt.typ</p>
<p>Die alternative dazu wäre Folgendes (2. Möglichkeit):</p>
<pre><code>class Basis {
public:
	virtual char typ() { return 0; };
// ...
}

class Kind {
public:
	virtual char typ() { return 1; };
// ...
</code></pre>
<p>Hier erhält man den Typen über kindObjekt.typ().</p>
<p>Also: Konstante Vorbelegung in der Basisklasse gegen virtuelle Funktion.<br />
Was ist a) sauberer?<br />
Und was ist b) schneller?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927675</guid><dc:creator><![CDATA[DerThomas]]></dc:creator><pubDate>Sat, 17 Jul 2010 14:51:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung - Beste Möglichkeit konstante Eigenschaft zuzuweisen on Sat, 17 Jul 2010 18:13:08 GMT]]></title><description><![CDATA[<p>Wenn das konstante Attribut eine Eigenschaft der Basisklasse ist, warum nicht dort deklarieren? Du hast damit den Overhead der VTable nicht, was schneller ist und weniger Speicher benötigt.</p>
<p>Ausserdem würde ich von konstanten Membern absehen, nur weil sich der Wert nicht verändern kann. Du nimmst damit einige Einschränkungen in Kauf (kein sinnvoller <code>operator=</code> möglich, keine Wertsemantik, keine Speicherung in STL-Containern). Verzichte lieber auf öffentliche Set-Methoden, wenn das Attribut von aussen nicht modifiziert werden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927685</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 17 Jul 2010 18:13:08 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung - Beste Möglichkeit konstante Eigenschaft zuzuweisen on Sun, 18 Jul 2010 14:11:23 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wenn das konstante Attribut eine Eigenschaft der Basisklasse ist, warum nicht dort deklarieren? Du hast damit den Overhead der VTable nicht, was schneller ist und weniger Speicher benötigt.</p>
</blockquote>
<p>Danke. Hat mir weitergeholfen, habe mich jetzt für Möglichkeit 1 entschieden.<br />
Ich wusste gar nicht wie das vorher umgesetzt wird (für andere mit dem gleiche Problem: <a href="http://de.wikipedia.org/wiki/Tabelle_virtueller_Methoden" rel="nofollow">VTable</a>).</p>
<blockquote>
<p>Ausserdem würde ich von konstanten Membern absehen, [...]</p>
</blockquote>
<p>Ist in diesem Fall egal. Alle erzeugten Objekte sind konstant und sollen sich nicht anders zuweisen lassen.</p>
<p>Danke + Gruß!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1928095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1928095</guid><dc:creator><![CDATA[DerThomas]]></dc:creator><pubDate>Sun, 18 Jul 2010 14:11:23 GMT</pubDate></item></channel></rss>