<?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[Spezialisierung]]></title><description><![CDATA[<p>Hallo, ich habe eine Basis-Klasse Atom und eine Klasse Molekül.<br />
Molekül enthält einen Vektor an Atomen.</p>
<p>Nun möchte ich spezielle Moleküle schaffen, welche nur bestimmte Atome aufnehmen können und weiß nicht wie oder ob das geht.</p>
<pre><code class="language-cpp">class Atom
{};

class Molecule
{
  vector&lt;Atom*&gt; atoms;
};

class SpecialAtom
{};

class SpecialMolecule
{
  vector&lt;SpecialAtom*&gt; atoms;
};
</code></pre>
<p>Das kompiliert zwar so (wenn ich eine main anlege), aber ich habe die Vermutung dass ich Zwei Vektoren anlege (vom Typ Atom und SpecialAtom). Ich bin mir da aber nicht ganz sicher, da meine C++ Kenntnisse eher gehobenem Anfängerniveau entsprechen.</p>
<p>Wie man das am besten löst weiß ich jetzt leider nicht.<br />
(Mir flattern zwar Begriffe wie Templates oder virtuelle Verebung durch den Kopf, aber irgendwie scheint das alles nicht ganz zuzutreffen).</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301751/spezialisierung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 21:36:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301751.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Apr 2012 04:19:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spezialisierung on Tue, 03 Apr 2012 04:19:52 GMT]]></title><description><![CDATA[<p>Hallo, ich habe eine Basis-Klasse Atom und eine Klasse Molekül.<br />
Molekül enthält einen Vektor an Atomen.</p>
<p>Nun möchte ich spezielle Moleküle schaffen, welche nur bestimmte Atome aufnehmen können und weiß nicht wie oder ob das geht.</p>
<pre><code class="language-cpp">class Atom
{};

class Molecule
{
  vector&lt;Atom*&gt; atoms;
};

class SpecialAtom
{};

class SpecialMolecule
{
  vector&lt;SpecialAtom*&gt; atoms;
};
</code></pre>
<p>Das kompiliert zwar so (wenn ich eine main anlege), aber ich habe die Vermutung dass ich Zwei Vektoren anlege (vom Typ Atom und SpecialAtom). Ich bin mir da aber nicht ganz sicher, da meine C++ Kenntnisse eher gehobenem Anfängerniveau entsprechen.</p>
<p>Wie man das am besten löst weiß ich jetzt leider nicht.<br />
(Mir flattern zwar Begriffe wie Templates oder virtuelle Verebung durch den Kopf, aber irgendwie scheint das alles nicht ganz zuzutreffen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198170</guid><dc:creator><![CDATA[anubit]]></dc:creator><pubDate>Tue, 03 Apr 2012 04:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung on Tue, 03 Apr 2012 07:48:17 GMT]]></title><description><![CDATA[<p>Da ich endlich wieder einen Rechner unter den Fingern habe, habe ich mal ein wenig probiert:</p>
<pre><code class="language-cpp">/*
 * main.cpp
 *
 *  Created on: 03.04.2012
 *      Author: anubis
 */

#include &lt;iostream&gt;
using namespace std;

class Base
{
public:
	int a;

	Base(): a(4) {}
};

class Derived : public Base
{
public:
	string a;

	Derived(): a(&quot;Hallo Welt&quot;) {}
};

void info(Base* b)
{
	cout &lt;&lt; b-&gt; a  &lt;&lt; endl;
}

int main()
{
	Base* b = new Derived;
	Derived d;

	cout &lt;&lt; b-&gt;a &lt;&lt; endl;
	cout &lt;&lt; d.a &lt;&lt; endl;

	info(b);
	return 0;
}
</code></pre>
<p>Die Ausgabe, die mich ehrlich gesagt verwundert:</p>
<blockquote>
<p>4<br />
Hallo Welt<br />
4</p>
</blockquote>
<p>Wieso gibt b-&gt;a die 4 zurück und nicht &quot;Hallo Welt&quot; . Ich hätte eine Überdeckung vermutet.</p>
<p>Besitzt b überhaupt das String-Attribut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198193</guid><dc:creator><![CDATA[anubit]]></dc:creator><pubDate>Tue, 03 Apr 2012 07:48:17 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung on Tue, 03 Apr 2012 09:23:18 GMT]]></title><description><![CDATA[<p>Gib doch erstmal den Membervariablen der einezelnen Klassen eindeutige Namen. Was soll denn a für &quot;Derivad&quot; sein; int a; oder string a?<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198217</guid><dc:creator><![CDATA[Helmut.Jakoby]]></dc:creator><pubDate>Tue, 03 Apr 2012 09:23:18 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung on Tue, 03 Apr 2012 09:24:04 GMT]]></title><description><![CDATA[<blockquote>
<p>Wieso gibt b-&gt;a die 4 zurück und nicht &quot;Hallo Welt&quot; . Ich hätte eine Überdeckung vermutet.</p>
</blockquote>
<p>b ist ein Pointer auf Base. Wenn du also b-&gt;a schreibst, denkt der Compiler sich, dass du den a-Member von Base meinst, also 4.<br />
Das Objekt, auf das b zeigt, hat aber sowohl int als auch string als Member:</p>
<pre><code class="language-cpp">class Base
{
public:
    int a;

    Base(): a(4) {}
	virtual void info() {cout &lt;&lt; a &lt;&lt; '\n';}
};

class Derived : public Base
{
public:
    string a;

    Derived(): a(&quot;Hallo Welt&quot;) {}
	void info() {cout &lt;&lt; Base::a &lt;&lt; ' ' &lt;&lt; a &lt;&lt; '\n';}
};

void info(Base* b)
{
    cout &lt;&lt; b-&gt; a  &lt;&lt; endl;
}

int main()
{
	Base* b = new Derived;
    Derived d;

    cout &lt;&lt; b-&gt;a &lt;&lt; endl;
    cout &lt;&lt; d.a &lt;&lt; endl;

    b-&gt;info();
	d.info();
	return 0;
}
</code></pre>
<pre><code>4
Hallo Welt
4 Hallo Welt
4 Hallo Welt
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2198218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198218</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Tue, 03 Apr 2012 09:24:04 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung on Tue, 03 Apr 2012 09:26:44 GMT]]></title><description><![CDATA[<p>Da gibt es keine Überdeckung. Lediglich wenn du aus Derived auf a zugreifen willst, wird es wohl etwas komplizierter (this-&gt;Base::a oder ähnliches). Da der Compiler nur einen Base-Zeiger sieht, greift er auch auf das a von Base zu. Ein Verhalten wie du es willst kannst du durch virtuelle Funktionen erreichen.</p>
<p>EDIT: Zu langsam... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2198219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2198219</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Tue, 03 Apr 2012 09:26:44 GMT</pubDate></item></channel></rss>