<?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[eindeutigkeit]]></title><description><![CDATA[<p>Ich habe ien Problem:</p>
<p>In einer Datenstruktur möchte ich einige Objekte, die eindeutig sein identifizierbar sein sollen.</p>
<p>Diese Objekte haben einen Namen, der vom Nutzer festgelegt werden kann.<br />
Um nun das Problem mit Mehrdeutigkeiten zu umgehen, habe ich eine Art ID hinzugefügt, welche im Konstruktor stets erhöht wird. Also jedes neue Objekt hat eine automatisch um 1 erhöhte ID.<br />
Was ich nicht bedacht habe:</p>
<p>Das ganze soll abgespeichert werden können, und die Objekte können voneinander abhängen.</p>
<p>Ums mal ganz einfach zu machen soll eine abgespeicherte Datei in etwa so aussehen:</p>
<pre><code>Objekt(Werte, Name, ID, Verweis auf anderes Objekt [bisher durch ID])
</code></pre>
<p>Das ganze soll aber auch wieder geladen werden können. Bei Programmstart ist die erste ID die vergeben wird immer 0. Werden nun zuerst andere Objekte erzeugt und dann eine Liste geladen besteht das Problem dass die Objekte wieder nicht eindeutig sein können.</p>
<p>Beispiel:</p>
<pre><code>Objekt x; // &lt;- erhält ID 0;
LadeListe(list);

list:
Objekt(12, &quot;Hugo&quot;, 0, 1), Objekt(21, &quot;Oskar&quot;, 1, -1)
</code></pre>
<p>Im Konstruktor von Objekt wird bisher ID nur über eine Klassenvariable festgelegt, also<br />
Objekt(ID i) gibt es nicht.</p>
<pre><code class="language-cpp">class Objekt
{
public:
    static int IDC;
    int id;
    Objekt(): id(IDC) { IDC ++};
}
</code></pre>
<p>in etwa.</p>
<p>Nun möchte ich aber wieder sicher gehen können dass Objekte eindeutig sind, aber auch dass alle Referenzen in bereits gespeicherten Listen richtig aufgelöst werden können.</p>
<p>Meine Ideen:</p>
<p>1. Auf das Hilfskonstrukt ID verzichten und statt dessen einen eindeutigen Namen verlangen und im Notfall zu ladende Objekte umbennen lassen.</p>
<p>2. Da IDC ja nur ein Wert ist könnte ich vor dem Laden einer Liste diese zunächst durchgehen und alle IDs und ID-verweise um IDC erhöhen, dadurch fügt sich die Liste in den bisherigen Verlauf wieder ein und alles bleibt eindeutig.</p>
<p>3. Irgendwas hatte ich noch... vergessen</p>
<p>Nachtrag:<br />
Normalerweise sollte der Fall dass eine Liste geladen wird wenn bereits Objekte existieren kaum vorkommen, aber Ignorieren des Problems ... ist das eine Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/263718/eindeutigkeit</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 14:32:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263718.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Mar 2010 07:22:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to eindeutigkeit on Thu, 25 Mar 2010 07:22:14 GMT]]></title><description><![CDATA[<p>Ich habe ien Problem:</p>
<p>In einer Datenstruktur möchte ich einige Objekte, die eindeutig sein identifizierbar sein sollen.</p>
<p>Diese Objekte haben einen Namen, der vom Nutzer festgelegt werden kann.<br />
Um nun das Problem mit Mehrdeutigkeiten zu umgehen, habe ich eine Art ID hinzugefügt, welche im Konstruktor stets erhöht wird. Also jedes neue Objekt hat eine automatisch um 1 erhöhte ID.<br />
Was ich nicht bedacht habe:</p>
<p>Das ganze soll abgespeichert werden können, und die Objekte können voneinander abhängen.</p>
<p>Ums mal ganz einfach zu machen soll eine abgespeicherte Datei in etwa so aussehen:</p>
<pre><code>Objekt(Werte, Name, ID, Verweis auf anderes Objekt [bisher durch ID])
</code></pre>
<p>Das ganze soll aber auch wieder geladen werden können. Bei Programmstart ist die erste ID die vergeben wird immer 0. Werden nun zuerst andere Objekte erzeugt und dann eine Liste geladen besteht das Problem dass die Objekte wieder nicht eindeutig sein können.</p>
<p>Beispiel:</p>
<pre><code>Objekt x; // &lt;- erhält ID 0;
LadeListe(list);

list:
Objekt(12, &quot;Hugo&quot;, 0, 1), Objekt(21, &quot;Oskar&quot;, 1, -1)
</code></pre>
<p>Im Konstruktor von Objekt wird bisher ID nur über eine Klassenvariable festgelegt, also<br />
Objekt(ID i) gibt es nicht.</p>
<pre><code class="language-cpp">class Objekt
{
public:
    static int IDC;
    int id;
    Objekt(): id(IDC) { IDC ++};
}
</code></pre>
<p>in etwa.</p>
<p>Nun möchte ich aber wieder sicher gehen können dass Objekte eindeutig sind, aber auch dass alle Referenzen in bereits gespeicherten Listen richtig aufgelöst werden können.</p>
<p>Meine Ideen:</p>
<p>1. Auf das Hilfskonstrukt ID verzichten und statt dessen einen eindeutigen Namen verlangen und im Notfall zu ladende Objekte umbennen lassen.</p>
<p>2. Da IDC ja nur ein Wert ist könnte ich vor dem Laden einer Liste diese zunächst durchgehen und alle IDs und ID-verweise um IDC erhöhen, dadurch fügt sich die Liste in den bisherigen Verlauf wieder ein und alles bleibt eindeutig.</p>
<p>3. Irgendwas hatte ich noch... vergessen</p>
<p>Nachtrag:<br />
Normalerweise sollte der Fall dass eine Liste geladen wird wenn bereits Objekte existieren kaum vorkommen, aber Ignorieren des Problems ... ist das eine Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1873640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1873640</guid><dc:creator><![CDATA[shisha]]></dc:creator><pubDate>Thu, 25 Mar 2010 07:22:14 GMT</pubDate></item><item><title><![CDATA[Reply to eindeutigkeit on Thu, 25 Mar 2010 07:31:58 GMT]]></title><description><![CDATA[<p>Wenn du die Daten in einer Datei speicherst, kannst du ja auch die höchste vergebene Id mit speichern und später als erstes diesen Wert laden.<br />
In einer Datenbank könntest du eine Sequence (oder wie in deiner DB der Mechanismus auch immer heißen mag) benutzen.<br />
Außerdem bieten sich noch UUIDs an (z.B. in boost).</p>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1873644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1873644</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 25 Mar 2010 07:31:58 GMT</pubDate></item><item><title><![CDATA[Reply to eindeutigkeit on Thu, 25 Mar 2010 07:52:25 GMT]]></title><description><![CDATA[<p>Hört sich ziemlich genau nach dem Testat an dass ich vor ein paar Wochen machen musste <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Ich gehe mal davon aus dass du eine Klasse hast die sich um die Datenhaltung, das Lesen und Schreiben in/aus Dateien kümmert.<br />
Eine einfache Lösung für so einen Fall wäre deine Datenhaltungsklasse als <a href="http://www.imb-jena.de/~gmueller/kurse/c_c++/c_friend.html" rel="nofollow">friend</a> in deiner Objekt-Klasse zu deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1873648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1873648</guid><dc:creator><![CDATA[rean]]></dc:creator><pubDate>Thu, 25 Mar 2010 07:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to eindeutigkeit on Thu, 25 Mar 2010 10:25:02 GMT]]></title><description><![CDATA[<p>rean schrieb:</p>
<blockquote>
<p>Eine einfache Lösung für so einen Fall wäre deine Datenhaltungsklasse als <a href="http://www.imb-jena.de/~gmueller/kurse/c_c++/c_friend.html" rel="nofollow">friend</a> in deiner Objekt-Klasse zu deklarieren.</p>
</blockquote>
<p>Das wäre eine einfache, aber sicher nicht besonders schöne/gute Lösung. Die Kapselung mittels friend zu zerbröseln sollte eigentlich das letzte sein, was man versucht, vor allem für reine Datenhaltung.<br />
Wenn die Klasse dazu gedacht ist, eine Datenhaltung zu ermöglichen, sollte sie eine entsprechende Schnittstelle anbieten und selber darüber entscheiden können, welche Attribute für die Datenhaltung überhaupt benötigt werden. Auf die Schnittstelle kann dann jede geeignete Datenhalterklasse zugreifen, statt dass eine ausgewählte Datenhalterklasse in den Eingeweiden der Klasse frei herumwühlen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1873708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1873708</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 25 Mar 2010 10:25:02 GMT</pubDate></item></channel></rss>