<?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[Teilweise Klassendefinition für Libraries]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ist es problemlos möglich für eine Schnittstellendefinition nur bestimmte Klasseninformationen zur Verfügung zu stellen oder habe ich mit Nebeneffekten zu rechnen?</p>
<p>Also ich dachte daran, dass meine Klasse etwa in Wirklichkeit so aussieht:</p>
<pre><code class="language-cpp">class Foo{
public:
	const Bar&amp; bar() const;
	void bar(Bar&amp; bar);
private:
	Bar bar;
};
</code></pre>
<p>Wenn ich jetzt eine Library kompilieren möchte, die diese Klasse verwendet, brauch die Klasse ja nicht alle Interna wissen:</p>
<p>Deswegen würde ich gerne für die Library eine Definition verwenden, die nur die notwendigen Informationen (bzw. die Funktionen die verwendet werden sollen) hat.</p>
<pre><code class="language-cpp">class Foo{
public:
	const Bar&amp; bar() const;
};
</code></pre>
<p>Ich vermute fast, dass der Standard dazu keine Angaben macht und das Verhalten somit undefiniert ist. Also sizeof(Foo) wäre ja z. Bsp. unterschiedlich. Also sobald ich ein Stackobjekt anlege, funktioniert es wohl nicht mehr(?).<br />
Ist das zulässig? Bzw. unter welchen Umständen ist es zulässig? Ist es beispielsweise zulässig, wenn ich nur Referenzen bzw. Zeiger darauf verwende?<br />
Ich würde das Objekt dann z.B. non-copyable machen. Dann würde mir nur noch das erwähnte sizeof einfallen, das einen falschen Wert liefert.</p>
<p>Oder muss ich rein-virtuelle Funktionen in Foo definieren und intern eine Klasse verwenden, die davon ableitet?</p>
<p>Ich weiß, dass ein virtual nicht wirklich teuer ist.<br />
Es handelt sich eher um eine Interessensfrage.<br />
Naja... Warum soll ich eine Klasse mit rein-virtuellen Funktionen machen, wenn eigentlich nur eine Implementierung existiert? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306018/teilweise-klassendefinition-für-libraries</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 12:07:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306018.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Jul 2012 16:09:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Teilweise Klassendefinition für Libraries on Sun, 15 Jul 2012 16:09:24 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ist es problemlos möglich für eine Schnittstellendefinition nur bestimmte Klasseninformationen zur Verfügung zu stellen oder habe ich mit Nebeneffekten zu rechnen?</p>
<p>Also ich dachte daran, dass meine Klasse etwa in Wirklichkeit so aussieht:</p>
<pre><code class="language-cpp">class Foo{
public:
	const Bar&amp; bar() const;
	void bar(Bar&amp; bar);
private:
	Bar bar;
};
</code></pre>
<p>Wenn ich jetzt eine Library kompilieren möchte, die diese Klasse verwendet, brauch die Klasse ja nicht alle Interna wissen:</p>
<p>Deswegen würde ich gerne für die Library eine Definition verwenden, die nur die notwendigen Informationen (bzw. die Funktionen die verwendet werden sollen) hat.</p>
<pre><code class="language-cpp">class Foo{
public:
	const Bar&amp; bar() const;
};
</code></pre>
<p>Ich vermute fast, dass der Standard dazu keine Angaben macht und das Verhalten somit undefiniert ist. Also sizeof(Foo) wäre ja z. Bsp. unterschiedlich. Also sobald ich ein Stackobjekt anlege, funktioniert es wohl nicht mehr(?).<br />
Ist das zulässig? Bzw. unter welchen Umständen ist es zulässig? Ist es beispielsweise zulässig, wenn ich nur Referenzen bzw. Zeiger darauf verwende?<br />
Ich würde das Objekt dann z.B. non-copyable machen. Dann würde mir nur noch das erwähnte sizeof einfallen, das einen falschen Wert liefert.</p>
<p>Oder muss ich rein-virtuelle Funktionen in Foo definieren und intern eine Klasse verwenden, die davon ableitet?</p>
<p>Ich weiß, dass ein virtual nicht wirklich teuer ist.<br />
Es handelt sich eher um eine Interessensfrage.<br />
Naja... Warum soll ich eine Klasse mit rein-virtuellen Funktionen machen, wenn eigentlich nur eine Implementierung existiert? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232978</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 15 Jul 2012 16:09:24 GMT</pubDate></item><item><title><![CDATA[Reply to Teilweise Klassendefinition für Libraries on Sun, 15 Jul 2012 17:26:38 GMT]]></title><description><![CDATA[<p>Pimpl?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233000</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 15 Jul 2012 17:26:38 GMT</pubDate></item><item><title><![CDATA[Reply to Teilweise Klassendefinition für Libraries on Sun, 15 Jul 2012 17:36:38 GMT]]></title><description><![CDATA[<p>abstrakte oberklassen definieren und gegen die programmieren<br />
also das was in java interfaces sind und wofür sie genutzt werden</p>
<p>aber ich denke mal, dass es genau sowas in c++ vermieden wird (weil ja dann mit pointern/referenzen gearbeitet werden muss). aber ich weis es nicht wirklich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233002</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 15 Jul 2012 17:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to Teilweise Klassendefinition für Libraries on Mon, 16 Jul 2012 04:13:19 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>aber ich denke mal, dass es genau sowas in c++ vermieden wird (weil ja dann mit pointern/referenzen gearbeitet werden muss).</p>
</blockquote>
<p>Nö, wird nicht vermieden, sondern oft genug gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233069</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 16 Jul 2012 04:13:19 GMT</pubDate></item></channel></rss>