<?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[Zwei Klassen in dritter vereinen]]></title><description><![CDATA[<p>hallo</p>
<p>ich suche nach einer möglichkeit, wie ich eine klasse vektor3 schreiben kann, die sowohl als vek3 klasse als auch als v3 klasse zweier externer pakete interpretiert werden kann.</p>
<p>sprich, ich möchte funktionen externer pakete nutzen, indem ich meine eigene klasse vektor3 übergebe, ohne diese jedes mal in die vektorklassen der pakete konvertieren muss</p>
<p>die dümmste naive idee wäre ja:</p>
<p>class vector3 : public vec3, public v3...</p>
<p>nur speicher ich dann 9 floats für einen 3d vektor. gibt es da evtl eine bessere möglichkeit?</p>
<p>danke für hilfe<br />
sas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235983/zwei-klassen-in-dritter-vereinen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 03:13:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235983.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Mar 2009 13:33:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zwei Klassen in dritter vereinen on Mon, 09 Mar 2009 13:33:34 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>ich suche nach einer möglichkeit, wie ich eine klasse vektor3 schreiben kann, die sowohl als vek3 klasse als auch als v3 klasse zweier externer pakete interpretiert werden kann.</p>
<p>sprich, ich möchte funktionen externer pakete nutzen, indem ich meine eigene klasse vektor3 übergebe, ohne diese jedes mal in die vektorklassen der pakete konvertieren muss</p>
<p>die dümmste naive idee wäre ja:</p>
<p>class vector3 : public vec3, public v3...</p>
<p>nur speicher ich dann 9 floats für einen 3d vektor. gibt es da evtl eine bessere möglichkeit?</p>
<p>danke für hilfe<br />
sas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676692</guid><dc:creator><![CDATA[sastrian]]></dc:creator><pubDate>Mon, 09 Mar 2009 13:33:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Klassen in dritter vereinen on Mon, 09 Mar 2009 13:39:33 GMT]]></title><description><![CDATA[<p>Wenn Mehrfachvererbung nichts ist, stellen vielleicht Cast-Operatoren eine Möglichkeit dar. Allerdings ist es <strong>sehr wichtig</strong>, dass man diese <strong>mit Bedacht</strong> einsetzt, denn es kann zu sehr vielen Kontexten kommen, in denen eine implizite Konvertierung unerwünscht ist. In solchen Fällen wären normale Memberfunktionen besser geeignet.</p>
<pre><code class="language-cpp">class vektor3
{
    public:
        operator v3() const;
        operator vec3() const;
};
</code></pre>
<p>Wenn du sagen kannst, dass zwischen deiner Klasse und einer der anderen Vektoren eine IST-EIN-Beziehung besteht, kannst du von dieser ableiten und den entsprechenden Cast-Operator weglassen. Dazu weiss ich jetzt allerdings zu wenig über dein Problem...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676700</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 09 Mar 2009 13:39:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Klassen in dritter vereinen on Mon, 09 Mar 2009 13:52:12 GMT]]></title><description><![CDATA[<p>danke erst mal für die schnelle antwort.</p>
<p>mir ist nur nicht ganz so klar, wie ich das einsetzen soll.</p>
<p>so etwa?</p>
<pre><code class="language-cpp">operator v3() const {
return v3(myX, myY, myZ);
}
</code></pre>
<p>?</p>
<p>wird dann nicht bei jedem schritt ein cast durchgeführt? (Was ich ja vermeiden wollte ursprünglich)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676723</guid><dc:creator><![CDATA[sastrian]]></dc:creator><pubDate>Mon, 09 Mar 2009 13:52:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Klassen in dritter vereinen on Mon, 09 Mar 2009 14:07:12 GMT]]></title><description><![CDATA[<p>sastrian schrieb:</p>
<blockquote>
<p>mir ist nur nicht ganz so klar, wie ich das einsetzen soll.</p>
<p>so etwa?</p>
<pre><code class="language-cpp">operator v3() const {
return v3(myX, myY, myZ);
}
</code></pre>
</blockquote>
<p>Ja, genau.</p>
<p>sastrian schrieb:</p>
<blockquote>
<p>wird dann nicht bei jedem schritt ein cast durchgeführt? (Was ich ja vermeiden wollte ursprünglich)</p>
</blockquote>
<p>Es wird ein Cast durchgeführt, wenn ein Objekt von <code>vektor3</code> in einem Kontext auftritt, in dem es als <code>v3</code> interpretiert werden kann.</p>
<p>Aber eben, im Zweifelsfalle nimmst du besser eine Methode:</p>
<pre><code class="language-cpp">v3 ToVector3() const
{
    return v3(myX, myY, myZ);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1676746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676746</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 09 Mar 2009 14:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Klassen in dritter vereinen on Mon, 09 Mar 2009 14:24:53 GMT]]></title><description><![CDATA[<p>ich bin noch auf folgende problemchen gestossen:</p>
<p>wenn ich das so mache, wie oben beschrieben</p>
<pre><code class="language-cpp">operator v3() const {
    return v3(myX, myY, myZ);
}
</code></pre>
<p>kommt käse bei raus, da der neu erzeugte v3 vektor am ende der funktion wech ist.<br />
löse ich das mit nem new aufruf</p>
<pre><code class="language-cpp">operator v3() const {
    v3 * vec = new v3(myX, myY, myZ);
    return *vec;
}
</code></pre>
<p>habe ich ein problem, dass er nie wieder gelöscht wird, wenn ich diesen vektor irgendwo übergebe</p>
<p>externespaket.externefunktion(myVec);</p>
<p>wobei myVec meine vektorklasse ist und vom externen paket die v3 klasse erwartet wird. es kompiliert und macht auch alles richtig, nur hab ich ein memorybug dadurch drinnen, weil der mit new erzeugte vektor nie wieder richtig entfernt wird und von mir auch nicht mehr entfernt werden kann oder?</p>
<p>danke nochmals</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676768</guid><dc:creator><![CDATA[sastrian]]></dc:creator><pubDate>Mon, 09 Mar 2009 14:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Klassen in dritter vereinen on Mon, 09 Mar 2009 14:31:24 GMT]]></title><description><![CDATA[<p>Ja, die Version mit <code>new</code> würde zu einem Memory Leak führen.</p>
<p>Aber wieso soll meine Version zu Käse führen? Das Objekt wird kopiert und existiert natürlich nur temporär. Normalerweise weist man Werte aber einer Variable zu, wenn man sie speichern will...</p>
<pre><code class="language-cpp">vektor3 AlterVektor;
v3 NeuerVektor = AlterVektor;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1676773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676773</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 09 Mar 2009 14:31:24 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Klassen in dritter vereinen on Mon, 09 Mar 2009 14:53:31 GMT]]></title><description><![CDATA[<p>käse = die werte spinnen hehe</p>
<p>der aufruf ist ja folgender:</p>
<p>externesv3Paket.externev3Funktion(meinVec)</p>
<p>externev3Funktion erwartet ja ein v3 und nicht ein vector3 (meinVec ist vom Typ vector3)</p>
<p>beimn casten von meinVec existiert das Objekt nur temporär und ist innerhalb der externev3Funktion nicht mehr vorhanden, also null und daher mit komischen werten</p>
<p>hoffe das ist nicht zu verwirrend^^</p>
<p>danke nochmals.</p>
<p>hier der bisherige gesamte code</p>
<pre><code class="language-cpp">#ifndef _HC_VEC_H_
#define _HC_VEC_H_

#include &lt;Ogre.h&gt;
#include &lt;Common/Base/hkBase.h&gt;

class hcVec
{

public:

	float x;
	float y;
	float z;

	hcVec() {
		x = 0;
		y = 0;
		z = 0;
	};

	hcVec(float xx, float yy, float zz)
	{	
		x = xx;
		y = yy;
		z = zz;
	};

	hcVec(Ogre::Vector3 &amp;other) {
		x = other.x;
		y = other.y;
		z = other.z;
	};

	hcVec(hkVector4 &amp;other) {
		x = other(0);
		y = other(1);
		z = other(2);
	};

	operator Ogre::Vector3&amp;() const {
		Ogre::Vector3 * newVec = new Ogre::Vector3(x, y, z);
		return *newVec;
	};

	operator hkVector4&amp;() const {
		hkVector4 * newVec = new hkVector4(x, y, z);
		return *newVec;
	};

	hcVec&amp; operator =(const Ogre::Vector3 &amp;vec) {
		x = vec.x;
		y = vec.y;
		z = vec.z;

		return *this;
	};

	hcVec&amp; operator =(const hkVector4 &amp;vec) {
		x = vec(0);
		y = vec(1);
		z = vec(2);

		return *this;
	};

};

#endif
</code></pre>
<p>mit dem Beispielaufruf</p>
<pre><code class="language-cpp">hcVec vec(4, 3, -2);

	Ogre::Vector3 example(2,2,2);
	hcVec res = example.crossProduct(vec);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1676789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676789</guid><dc:creator><![CDATA[sastrian]]></dc:creator><pubDate>Mon, 09 Mar 2009 14:53:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zwei Klassen in dritter vereinen on Mon, 09 Mar 2009 15:04:52 GMT]]></title><description><![CDATA[<p>sastrian schrieb:</p>
<blockquote>
<p>beimn casten von meinVec existiert das Objekt nur temporär und ist innerhalb der externev3Funktion nicht mehr vorhanden, also null und daher mit komischen werten</p>
</blockquote>
<p>Temporär heisst hier während der Lebenszeit des gesamten Ausdrucks, also auch über die ganze Zeit des Funktionsaufrufs hinweg. Wird da innerhalb von Ogre noch etwas Komisches gemacht? Schau mal mit dem Debugger, bis wo das Objekt gültig ist und noch brauchbare Werte besitzt.</p>
<p>Du solltest ausserdem Initialisierungslisten bei Konstruktoren und Const-Referenzen anstatt Referenzen als Parameter verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1676803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1676803</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 09 Mar 2009 15:04:52 GMT</pubDate></item></channel></rss>