<?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[Zeiger oder Referenzen]]></title><description><![CDATA[<p>Hallo,<br />
ich hab eine Klasse (oder eine Anzahl von Klassen), die Bildschirmkoordinaten verwalten sollen. Mit Hilfe dieser Klassen soll man auch kompliziertere Koordinaten (z.B. 1/2 mal der Bildschirmbreite + 20 Pixel, aber nicht mehr als 2/3*die Bildschirmbreite).<br />
Dies habe ich wie folgt modelliert:</p>
<p>ein Template, welches eine Koordinate darstellt (der Templateparameter ist die Funktion, die die Bildschirmdimension zurückgibt (Höhe oder Breite, je nachdem ob x- oder y- koordinate)):</p>
<pre><code class="language-cpp">class CoorImpNode;

template&lt;int (*GetScale)()&gt; 
class Coor 
{
private:
	CoorImpNode* ImpNode;

protected:

public:

	int GetAbs() const;

	double GetValue() const;

	Coor&amp; operator= (const Coor&amp; coor);

	Coor(const Coor&amp; coor)
	{
		this-&gt;ImpNode = coor.ImpNode-&gt;GetClone();
	}

	Coor(CoorImpNode* impNode)
	{
		this-&gt;ImpNode = impNode-&gt;GetClone();
	}

	virtual ~Coor()
	{
		delete ImpNode;
	}
};
</code></pre>
<p>Und dann eine Basisklasse und verschiedene abgeleitete Klassen für die konkrete Implementierung der Koordinaten:</p>
<pre><code class="language-cpp">//Basisklasse
class CoorImpNode
{
private:
protected:

public:
	virtual double GetValue(double scale) const = 0;
	virtual CoorImpNode* GetClone() const = 0;
	CoorImpNode();
	virtual ~CoorImpNode();

};

//normale Kordinate, als Bruchteil des Bildschirms
class CINStandard : public CoorImpNode
{
private:
	double Value;
public:
	double GetValue(double scale) const;
	CoorImpNode* GetClone() const;
	CINStandard(double value);
	virtual ~CINStandard();

};

//abolute Koordinate in Pixeln
class CINAbsolute : public CoorImpNode
{
private:
	double Value;
public:
	double GetValue(double scale) const;
	CoorImpNode* GetClone() const;
	CINAbsolute(double value);
	CINAbsolute(const CINAbsolute&amp; obj);
	virtual ~CINAbsolute();
};

//Summe zweier Koordinaten
class CINSum : public CoorImpNode	
{
private:
	CoorImpNode* Left;
	CoorImpNode* Right;
public:
	double GetValue(double Scale) const;
	CoorImpNode* GetClone() const;
	CINSum(CoorImpNode* left, CoorImpNode* right);
	CINSum(const CINSum&amp; obj);
	virtual ~CINSum();
};
//etc.
</code></pre>
<p>Nun kann man beliebige Baumartige Strukturen aus diesen Koordinaten (diese representieren dann einen Term zur Berechnung der Kordinate) zusammenstellen.<br />
Meine Frage ist, was sollte den Konstruktoren übergeben werden?</p>
<p>Ich möchte gerne, dass man in etwa sowas schreiben kann:</p>
<p>(XCoor ist ein typedef für Coor mit dem richtigen template-Parameter)</p>
<pre><code class="language-cpp">XCoor a(CINSum(CINStandard(1.0/2.0),CINAbsolute(20)));
</code></pre>
<p>Kann ich dafür den Konstruktoren konstante Referenzen auf CoorImpNode übergeben?<br />
Oder wie oben Zeiger? Was wäre effizienter?</p>
<p>Vielen Dank für die Mühe, alle Kommentare sind willkommen!</p>
<p>Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176866/zeiger-oder-referenzen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 15:29:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176866.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Mar 2007 20:15:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger oder Referenzen on Sun, 25 Mar 2007 20:15:00 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich hab eine Klasse (oder eine Anzahl von Klassen), die Bildschirmkoordinaten verwalten sollen. Mit Hilfe dieser Klassen soll man auch kompliziertere Koordinaten (z.B. 1/2 mal der Bildschirmbreite + 20 Pixel, aber nicht mehr als 2/3*die Bildschirmbreite).<br />
Dies habe ich wie folgt modelliert:</p>
<p>ein Template, welches eine Koordinate darstellt (der Templateparameter ist die Funktion, die die Bildschirmdimension zurückgibt (Höhe oder Breite, je nachdem ob x- oder y- koordinate)):</p>
<pre><code class="language-cpp">class CoorImpNode;

template&lt;int (*GetScale)()&gt; 
class Coor 
{
private:
	CoorImpNode* ImpNode;

protected:

public:

	int GetAbs() const;

	double GetValue() const;

	Coor&amp; operator= (const Coor&amp; coor);

	Coor(const Coor&amp; coor)
	{
		this-&gt;ImpNode = coor.ImpNode-&gt;GetClone();
	}

	Coor(CoorImpNode* impNode)
	{
		this-&gt;ImpNode = impNode-&gt;GetClone();
	}

	virtual ~Coor()
	{
		delete ImpNode;
	}
};
</code></pre>
<p>Und dann eine Basisklasse und verschiedene abgeleitete Klassen für die konkrete Implementierung der Koordinaten:</p>
<pre><code class="language-cpp">//Basisklasse
class CoorImpNode
{
private:
protected:

public:
	virtual double GetValue(double scale) const = 0;
	virtual CoorImpNode* GetClone() const = 0;
	CoorImpNode();
	virtual ~CoorImpNode();

};

//normale Kordinate, als Bruchteil des Bildschirms
class CINStandard : public CoorImpNode
{
private:
	double Value;
public:
	double GetValue(double scale) const;
	CoorImpNode* GetClone() const;
	CINStandard(double value);
	virtual ~CINStandard();

};

//abolute Koordinate in Pixeln
class CINAbsolute : public CoorImpNode
{
private:
	double Value;
public:
	double GetValue(double scale) const;
	CoorImpNode* GetClone() const;
	CINAbsolute(double value);
	CINAbsolute(const CINAbsolute&amp; obj);
	virtual ~CINAbsolute();
};

//Summe zweier Koordinaten
class CINSum : public CoorImpNode	
{
private:
	CoorImpNode* Left;
	CoorImpNode* Right;
public:
	double GetValue(double Scale) const;
	CoorImpNode* GetClone() const;
	CINSum(CoorImpNode* left, CoorImpNode* right);
	CINSum(const CINSum&amp; obj);
	virtual ~CINSum();
};
//etc.
</code></pre>
<p>Nun kann man beliebige Baumartige Strukturen aus diesen Koordinaten (diese representieren dann einen Term zur Berechnung der Kordinate) zusammenstellen.<br />
Meine Frage ist, was sollte den Konstruktoren übergeben werden?</p>
<p>Ich möchte gerne, dass man in etwa sowas schreiben kann:</p>
<p>(XCoor ist ein typedef für Coor mit dem richtigen template-Parameter)</p>
<pre><code class="language-cpp">XCoor a(CINSum(CINStandard(1.0/2.0),CINAbsolute(20)));
</code></pre>
<p>Kann ich dafür den Konstruktoren konstante Referenzen auf CoorImpNode übergeben?<br />
Oder wie oben Zeiger? Was wäre effizienter?</p>
<p>Vielen Dank für die Mühe, alle Kommentare sind willkommen!</p>
<p>Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1252512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1252512</guid><dc:creator><![CDATA[Sir Niko]]></dc:creator><pubDate>Sun, 25 Mar 2007 20:15:00 GMT</pubDate></item></channel></rss>