<?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[erben von template klasse]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>ich hatte gestern die abstruse idee in C++ eine Klasse zu<br />
schreiben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> die ein ähnliches verhalten aufweist wie<br />
die aus den Microsoft &quot;Managed Code&quot;-Sprachen bekannten<br />
&quot;Properties&quot;!Also setzte ich mich ran und baute einen kleinen, süßen Container:</p>
<pre><code class="language-cpp">#ifndef PROPERTY_HPP
#define PROPERTY_HPP

template&lt;class T&gt;
class property
{
    protected:
        T _instance;

    protected:
        virtual T get() { return this-&gt;_instance; }
        virtual void set(T&amp; type) { this-&gt;_instance = type;}

    public:
        T operator =(T&amp; type) { this-&gt;set(type); }
        operator T() { return this-&gt;get(); }
};

#endif
</code></pre>
<p>Mein Plan war, das man die get/set Funktionen in geerbten Klassen<br />
überschreiben kann und dort evtl. eigenen Code einfügt,<br />
der dann mittels der operatoren ausgeführt wird!</p>
<p>Dieses habe ich dann auch gleich probiert:</p>
<pre><code class="language-cpp">class intprop : public property&lt;int&gt;
{
    private:
        void set(int &amp;type)
        {
            this-&gt;_instance;
            type++;
        }
};

class proptest
{
    public:
        intprop intProp;
};
</code></pre>
<p>so weit, so gut!aber:</p>
<pre><code>int main(void)
{
    proptest oproptest;
    int test = 22;

    [b]oproptest.intProp = test;[/b]
    std::cout &lt;&lt; oproptest.intProp  &lt;&lt; std::endl;

    std::cin.get();
    return EXIT_SUCCESS;
}
</code></pre>
<p>an der makierten Stelle gibt er mir folgenden Fehler:</p>
<pre><code>no match for 'operator=' in 'oproptest.proptest::intProp = test'
candidates are: myint&amp; myint::operator=(const myint&amp;)
</code></pre>
<p>jetzt frage ich mich doch: warum?!so wie ich mir das gedacht<br />
hatte müsste er doch beim erben die &quot;int&quot; als Template-Typ für<br />
die Funktionen usw. übernehmen oder nich?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189250/erben-von-template-klasse</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 08:18:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189250.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Aug 2007 10:23:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to erben von template klasse on Fri, 10 Aug 2007 10:23:04 GMT]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>ich hatte gestern die abstruse idee in C++ eine Klasse zu<br />
schreiben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> die ein ähnliches verhalten aufweist wie<br />
die aus den Microsoft &quot;Managed Code&quot;-Sprachen bekannten<br />
&quot;Properties&quot;!Also setzte ich mich ran und baute einen kleinen, süßen Container:</p>
<pre><code class="language-cpp">#ifndef PROPERTY_HPP
#define PROPERTY_HPP

template&lt;class T&gt;
class property
{
    protected:
        T _instance;

    protected:
        virtual T get() { return this-&gt;_instance; }
        virtual void set(T&amp; type) { this-&gt;_instance = type;}

    public:
        T operator =(T&amp; type) { this-&gt;set(type); }
        operator T() { return this-&gt;get(); }
};

#endif
</code></pre>
<p>Mein Plan war, das man die get/set Funktionen in geerbten Klassen<br />
überschreiben kann und dort evtl. eigenen Code einfügt,<br />
der dann mittels der operatoren ausgeführt wird!</p>
<p>Dieses habe ich dann auch gleich probiert:</p>
<pre><code class="language-cpp">class intprop : public property&lt;int&gt;
{
    private:
        void set(int &amp;type)
        {
            this-&gt;_instance;
            type++;
        }
};

class proptest
{
    public:
        intprop intProp;
};
</code></pre>
<p>so weit, so gut!aber:</p>
<pre><code>int main(void)
{
    proptest oproptest;
    int test = 22;

    [b]oproptest.intProp = test;[/b]
    std::cout &lt;&lt; oproptest.intProp  &lt;&lt; std::endl;

    std::cin.get();
    return EXIT_SUCCESS;
}
</code></pre>
<p>an der makierten Stelle gibt er mir folgenden Fehler:</p>
<pre><code>no match for 'operator=' in 'oproptest.proptest::intProp = test'
candidates are: myint&amp; myint::operator=(const myint&amp;)
</code></pre>
<p>jetzt frage ich mich doch: warum?!so wie ich mir das gedacht<br />
hatte müsste er doch beim erben die &quot;int&quot; als Template-Typ für<br />
die Funktionen usw. übernehmen oder nich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342101</guid><dc:creator><![CDATA[Basingstoke]]></dc:creator><pubDate>Fri, 10 Aug 2007 10:23:04 GMT</pubDate></item><item><title><![CDATA[Reply to erben von template klasse on Fri, 10 Aug 2007 11:03:21 GMT]]></title><description><![CDATA[<p>Du erbst aber meines Wissens nicht den operator=<br />
Den muesstest du fuer intprop nochmal definieren:</p>
<pre><code class="language-cpp">int intprop::operator=(int type) { return property&lt;int&gt;::operator=(type); }
</code></pre>
<p>Du koenntest auch direkt set aufrufen, aber durch benutzung des operators der elternklasse stellst du sicher, dass das Verhalten konsistent bleibt, wenn du den in der elternklasse aenderst (z.B. irgendwelche aktionen vorm set ausfuehrst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342129</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 10 Aug 2007 11:03:21 GMT</pubDate></item><item><title><![CDATA[Reply to erben von template klasse on Fri, 10 Aug 2007 11:28:02 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p><strong>Du erbst aber meines Wissens nicht den operator=<br />
Den muesstest du fuer intprop nochmal definieren:</strong></p>
<pre><code class="language-cpp">int intprop::operator=(int type) { return property&lt;int&gt;::operator=(type); }
</code></pre>
</blockquote>
<p>aber das ist doch das Problem!ich erbe die operatoren ja,nur mit dem falschen<br />
typ!normaler weise wollte ich ja int als typ haben aber er hat<br />
mir einfach myint draus gemacht.verrückte welt.das wiederspricht meiner<br />
logik schon ein bischen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Du koenntest auch direkt set aufrufen, aber durch benutzung des operators der elternklasse stellst du sicher, dass das Verhalten konsistent bleibt, wenn du den in der elternklasse aenderst (z.B. irgendwelche aktionen vorm set ausfuehrst)</p>
</blockquote>
<p>und nicht nur das:ich wollte mit den operatoren das Verhalten von &quot;Properties&quot;<br />
nachahmen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342145</guid><dc:creator><![CDATA[Basingstoke]]></dc:creator><pubDate>Fri, 10 Aug 2007 11:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to erben von template klasse on Fri, 10 Aug 2007 11:35:31 GMT]]></title><description><![CDATA[<p>Operatoren lassen sich nicht vererben. Muß man immer wieder neu implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342153</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 10 Aug 2007 11:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to erben von template klasse on Fri, 10 Aug 2007 11:41:06 GMT]]></title><description><![CDATA[<p>Operatoren werden wie normale Funktionen vererbt, auch unser operator= aus property&lt;int&gt;. Allerdings wird dieser geerbte Operator durch den implizit deklarierten Copy-Zuweisungsoperator in intprop verdeckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342156</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 10 Aug 2007 11:41:06 GMT</pubDate></item><item><title><![CDATA[Reply to erben von template klasse on Fri, 10 Aug 2007 11:50:22 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>mit</p>
<pre><code class="language-cpp">class intprop : public property&lt;int&gt;
{
public:
   using property&lt;int&gt;::operator=;
...
</code></pre>
<p>geht's jedenfalls.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342160</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 10 Aug 2007 11:50:22 GMT</pubDate></item><item><title><![CDATA[Reply to erben von template klasse on Fri, 10 Aug 2007 13:22:19 GMT]]></title><description><![CDATA[<p>vielen dank für die ganzen antworten.gib es nicht vielleicht<br />
irgendein schönen flag das den operator erzwingt?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342215</guid><dc:creator><![CDATA[Basingstoke]]></dc:creator><pubDate>Fri, 10 Aug 2007 13:22:19 GMT</pubDate></item><item><title><![CDATA[Reply to erben von template klasse on Fri, 10 Aug 2007 13:53:31 GMT]]></title><description><![CDATA[<p>Der Compiler generiert für jede Klasse, die keinen hat, einen operator=. Dieser verdeckt den geerbten. Was soll da erzwungen werden? Die Regeln der Sprache zu ignorieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342229</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 10 Aug 2007 13:53:31 GMT</pubDate></item><item><title><![CDATA[Reply to erben von template klasse on Fri, 10 Aug 2007 16:53:02 GMT]]></title><description><![CDATA[<p>aber es wiederspricht doch auch der Sprache wenn er alle<br />
public funktionen public setzt nur die operatoren nich...also<br />
die 3 standard-dinger auf jedenfall..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342335</guid><dc:creator><![CDATA[Basingstoke]]></dc:creator><pubDate>Fri, 10 Aug 2007 16:53:02 GMT</pubDate></item><item><title><![CDATA[Reply to erben von template klasse on Fri, 10 Aug 2007 17:24:52 GMT]]></title><description><![CDATA[<p>Basingstoke schrieb:</p>
<blockquote>
<p>aber es wiederspricht doch auch der Sprache wenn er alle<br />
public funktionen public setzt nur die operatoren nich...also<br />
die 3 standard-dinger auf jedenfall..</p>
</blockquote>
<p>Also den Satz verstehe ich nicht. Möchtest Du ihn vielleicht nochmal neu formulieren?</p>
<p>Jedenfalls widerspricht diese Regel nicht der allgemeinen Regel zum Verdecken von Funktionen in Ableitungen, wie dieses Beispiel zeigt.</p>
<pre><code class="language-cpp">class Base
{
    public:
        void doIt(int);
};

class Derived: Base
{
    public:
        void doIt(char const*);
};

int main()
{
    Derived d;
    d.doIt(12); // error: invalid conversion from `int' to `const char*'
}
</code></pre>
<p>Nichts anderes passiert bei Dir. Der vom Compiler generierte operator=(intprop const&amp;) verdeckt den geerbten operator=(int), genauso wie doIt(char const*) doIt(int) verdeckt (das bedeutet nicht, dass doIt(int) plötzlich nicht mehr public ist). Mit using Base::doIt in der Derived-Klasse funktioniert der Code jedoch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342348</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 10 Aug 2007 17:24:52 GMT</pubDate></item></channel></rss>