zeiger vergleichen
-
vlad_tepesch schrieb:
Der Fall sollte doch recht eindeutig sein, oder nicht?
Ich frage ja dich, was du darunter verstehst. Es geht aus deinen Aussagen nämlich nicht eindeutig hervor, ob du mit "demselben Objekt" das aktuelle Objekt meinst, auf welches der Zeiger gerade zeigt, oder das gesamte polymorphe Objekt.
Das verändert nämlich dann auch entscheidend die Antwort. Wenn man vom Objekt ausgeht, auf welches gerade gezeigt wird, dann ist es definiert, dass man über die Zeigergleichheit prüfen kann, dass es die gleichen Objekte sind, schliesslich kann an der gleichen Speicheradresse nicht doppelter Speicher vorhanden sein. Wenn man allerdings davon ausgeht, dass man prüfen möchte, ob es das gleiche polymorphe Objekte ist, dann geht das nicht mehr. Ausser man würde zuerst die Zeiger auf die Basisklassen-Objekte per
dynamic_cast
in Zeiger auf die entsprechenden Most-Derived-Klassenobjekte umwandeln.Grüssli
-
Simon2 schrieb:
vlad_tepesch schrieb:
...Das ist der kleine, aber feine Unterschied zwischen 'das gleiche' und 'das selbe'...
Nunja, diese beiden Ausdrücke sind aber nicht so streng definiert (oder gar gegeneinander abgegrenzt), dass man sie ohne weitere Erklärung verwenden oder zuordnen kann.
Du kannst nicht für die selbe Straftat zweimal verurteilt werden, aber für die gleiche schon, hab ich mal gehört. Also für die Geschwindigkeitsüberschreitung am 12.12.1912 um 12:12 kannst du nur einmal verurteilt werden, aber wenn du nochmal die gleiche Straftat (Geschwindigkeitsüberschreitung) zu einem anderen Zeitpunkt nochmal begehst, kannst du natürlich wieder verurteilt werden.
-
kann mir jemand helfen herauszufinden was ich ändern muss am Code wegen dem Fehler?
Hab schon alles versucht was mir einfiel...struct element{char *begriff; int seite1; int seite2; int seite3;};
bool suche_genau(element *verzeichnis,const char* suchbegriff,int anz)
{
if(strcmp(verzeichnis->begriff,suchbegriff)==0){
anz=1;
return true;
}
else
return false;
}
int main()
{
element stichwortverzeichnis[1000]=
{{"Atom",1,45,387},{"Betastrahlung",2,48,793},{"Gammastrahlung",17,49,845}};
int anzahl=0;
const char suchbegriff="Atom";if(suche_genau(element* ,char ,int)==true)
cout<<"Treffer in Seite "<<stichwortverzeichnis.seite1<<stichwortverzeichnis.seite2<<stichwortverzeichnis.seite3<<endl;
else
cout<<"kein Treffer"<<endl;
return 0;
}
-
forever21 schrieb:
kann mir jemand helfen herauszufinden was ich ändern muss am Code wegen dem Fehler?
Hab schon alles versucht was mir einfiel...Ähm, Zusammenhang?
Mach einen eigenen Thread auf und verwende [cpp]-Tags, um den Code zu formatieren, sonst werden ihn sich nicht viele Leute anschauen.
-
sorry
-
Einsperrer schrieb:
...Du kannst nicht für die selbe Straftat zweimal verurteilt werden, aber für die gleiche schon, hab ich mal gehört. Also für die Geschwindigkeitsüberschreitung am 12.12.1912 um 12:12 kannst du nur einmal verurteilt werden, aber wenn du nochmal die gleiche Straftat (Geschwindigkeitsüberschreitung) zu einem anderen Zeitpunkt nochmal begehst, kannst du natürlich wieder verurteilt werden.
Wir können gerne das Forum füllen mit mehr oder minder scharfen Begriffsdefinitionen aus anderen Disziplinen - bringt aber nicht weiter, weil es letzlich dabei bleibt: Im C++-Standard wird nirgends definiert, was "dasselbe" oder "das Gleiche" sei... (wenn doch, bitte ich um entsprechende Quellenangabe).
... und selbst in der Informatik ist mir nicht bekannt, dass diese Begriffe scharf definiert seien (aber auch hier bin ich belehrbar).Gruß,
Simon2.
-
für gleiche Objekte gibt es den Gleichheitsoperator, also ist es schon geregelt.
für mich ist ein gleiches objekt:
*this == otherObjectdasselbe objekt:
this == &otherObject
ich meine es ist auch dasselbe, wenn pointer A auf die Basisklasse zeigt und Pointer X auf die 230te Ableitung und das Objekt vom Typ 560te Ableitung ist.
es wurde einmal ein object erzeugt, egal wie die Pointer darauf typisiert sind, möchte ich wissen, ob es dasselbe ist wie mein VergleichsppointerDas Frage ist aber eher theoritischer Natur, da bei mir die Pointer gleichsind, und das Objekt tatsächlich vom selben typ wie die Pointer sind (und auch keine Mehrfachvererbung in der Hierarchie vorkommt).
-
Simon2 schrieb:
Im C++-Standard wird nirgends definiert, was "dasselbe" oder "das Gleiche" sei... (wenn doch, bitte ich um entsprechende Quellenangabe).
... und selbst in der Informatik ist mir nicht bekannt, dass diese Begriffe scharf definiert seien (aber auch hier bin ich belehrbar).Muß auch nicht, weil die Begriffe schon immer eindeutig sind,
das Selbe => x und y bezeichnen ein Ding
das Gleiche => x und y sind 2 Dinge. beide haben gleiche Eigenschaften und keine Unterschiedevlad_tepesch schrieb:
Das Frage ist aber eher theoritischer Natur, da bei mir die Pointer gleichsind, und das Objekt tatsächlich vom selben typ wie die Pointer sind (und auch keine Mehrfachvererbung in der Hierarchie vorkommt)
Wenn beide Pointer gleich sind dann zeigen sie auf DAS SELBE Objekt
-
general bacardi schrieb:
...
Muß auch nicht, weil die Begriffe schon immer eindeutig sind,
das Selbe => x und y bezeichnen ein Ding
das Gleiche => x und y sind 2 Dinge. beide haben gleiche Eigenschaften und keine Unterschiede
...Ich weiß nicht, was Du non diesem Thread schon gelesen hast, deswegen wiederhole ich nochmal meine Frage: Bist Du nach dem Lesen dieses Posts noch derselbe wie vorher? Oder nur noch der Gleiche? Oder weder noch?
Gruß,
Simon2.
-
Simon2 schrieb:
Ich weiß nicht, was Du non diesem Thread schon gelesen hast,
Nur diese Seite.
Simon2 schrieb:
deswegen wiederhole ich nochmal meine Frage: Bist Du nach dem Lesen dieses Posts noch derselbe wie vorher? Oder nur noch der Gleiche? Oder weder noch?
Der Gleiche nicht, da jeder einmalig ist. Der Selbe ist man immer, unabhängig von anderen EInflüssen, Vorausgesetzt man bezieht sich auf Existenz und nicht auf umgangssprachliche Bedeutung von "Der Selbe"
-
general bacardi schrieb:
Wenn beide Pointer gleich sind dann zeigen sie auf DAS SELBE Objekt
Die Frage zielte aber auf den Umkehrschluss=
ließ dir mal die Beispiele in den anderen Seiten durch, speziell die mit Mehrfachvererbung.B1 B2 v v D1B1 D1B2 \ / \ / v C C* c = new C; D1B1* d1b1 = c; D1B2* d1b2 = c; B1* b1 = d1b1; B2* b2 = d1b2;
Die Pointer zeigen alle auf dasselbe Objekt.
Die Frage sind die Pointer gleich, ist wohl nicht so trivial, da die Adressen, auf die die Pointer zeigen andere sind.noch verwirrender wird es, wenn folgendes dazu kommt:
BB / \ / \ v v B1 B2 v v D1B1 D1B2 \ / \ / v C C* c = new C; D1B1* d1b1 = c; D1B2* d1b2 = c; B1* b1 = d1b1; B2* b2 = d1b2; BB* bb1 = b1 ; BB* bb2 = b2 ;
Da die bb1 und bb2 auf unterschiedliche BB instanzen zeigen (keine virtuelle Vererbung)
das gesammte Objekt ist immer noch dasselbe, dennoch wird ein Vergleich bb1 == bb2 wahrscheinlich false liefern.
-
vlad_tepesch schrieb:
Die Frage sind die Pointer gleich, ist wohl nicht so trivial, da die Adressen, auf die die Pointer zeigen andere sind.
Es ist trivial
Wenn Pointer andere Inhalte haben dann zeigen sie auf VERSCHIEDENE Objekte, auch wenn ein Objekt eine exakte Kopie des anderen ist. Zwei Objekte können nicht gleichzeitig die selben Speicherzellen belegen und zwei Pointer können nicht unterschiedlich sein, wenn sie auf DAS SELBE Objekt zeigen
-
sag mal,
ließt du dir auch mal durch, was andere schreiben?
-
vlad_tepesch schrieb:
sag mal,
ließt du dir auch mal durch, was andere schreiben?Hat das was isch sagte schon wer geschrieben?
-
Hi general,
ich würde Dir dringend empfehlen, diesen Thread nochmal von Vorne zu lesen. Vieles von Deinen Ansätzen wurde hier schon ausreichend besprochen.
Trotzdem wiederhole ich nochmal kurz für Deine letzten Statements:
general bacardi schrieb:
...
Simon2 schrieb:
deswegen wiederhole ich nochmal meine Frage: Bist Du nach dem Lesen dieses Posts noch derselbe wie vorher? Oder nur noch der Gleiche? Oder weder noch?
Der Gleiche nicht, da jeder einmalig ist. ...
Ich weiß jetzt nicht, wie das da reinpasst - wieso kannst Du jetzt nicht mehr der Gleiche sein wie vor 5 Minuten, "...weil jeder einmalig ist" ?
general bacardi schrieb:
...Der Selbe ist man immer, unabhängig von anderen Einflüssen, ...
Aber worauf gründest Du Diese Aussage? Immerhin hat sich Dein kompletter Körper verändert (Gehirnstrukturen umgebildet, Haut- und andere Zellen erneuert, Darmflora veränderet, Haar & Fingernägel gewachsen ....), Dein Wissenund Bewusstseinszustand, Du hast irreversible Entscheidungen gefällt, Dein Bankkonto hat evtl. nicht mehr denselben Stand, ...
Was ist da noch "dasselbe" an Dir?
general bacardi schrieb:
...Zwei Objekte können nicht gleichzeitig die selben Speicherzellen belegen ...
Doch.
Mal ein paar Möglichkeiten:
- zu unterschiedlichen Zeitpunkten schon (nicht trivialer Einwand, wen man z.B. Multithreading und die technische Umsetzung von "Adresse holen" berücksichtigt)
- Betriebssysteme dürfen zeitgleich verschiedenen Anwendungen denselben Adressraum anbieten ... auch wenn er "physikalisch" durch unterschiedliche Komponenten abgebildet wird (=> selbe Adresse unterschiedliche Objekte)
- Betriebsysteme dürfen (und tun) Anwendungsadressräume "verschieben" (einfachstes Beispiel: Swapping) (=> "selbes Objekt" hat unterschiedliche "Adresse")BTW: Der C++-Standard sagt nichts über "Speicherzellen" - diese Begriff ist auch nicht wirklich hilfeich.
Gruß,
Simon2.
-
Simon2 schrieb:
general bacardi schrieb:
...
Simon2 schrieb:
deswegen wiederhole ich nochmal meine Frage: Bist Du nach dem Lesen dieses Posts noch derselbe wie vorher? Oder nur noch der Gleiche? Oder weder noch?
Der Gleiche nicht, da jeder einmalig ist. ...
Ich weiß jetzt nicht, wie das da reinpasst - wieso kannst Du jetzt nicht mehr der Gleiche sein wie vor 5 Minuten, "...weil jeder einmalig ist" ?
Wenn ich "der Gleiche" von irgendwem wäre dann müßte es einen Doppelgänger geben.
Simon2 schrieb:
general bacardi schrieb:
...Der Selbe ist man immer, unabhängig von anderen Einflüssen, ...
Aber worauf gründest Du Diese Aussage? Immerhin hat sich Dein kompletter Körper verändert (Gehirnstrukturen umgebildet, Haut- und andere Zellen erneuert, Darmflora veränderet, Haar & Fingernägel gewachsen ....), Dein Wissenund Bewusstseinszustand, Du hast irreversible Entscheidungen gefällt, Dein Bankkonto hat evtl. nicht mehr denselben Stand, ...
Was ist da noch "dasselbe" an Dir?Bei einem Ding als Einheit sind Änderungen egal. Eine Tomate bleibt dieselbe Tomate auch wenn ich sie blau anmale. Es geht um die Existenz des Dings
-
general bacardi schrieb:
...
Wenn ich "der Gleiche" von irgendwem wäre dann müßte es einen Doppelgänger geben....Du meinst also: Es gibt niemals "das Gleiche", sehe ich das richtig?
general bacardi schrieb:
...Bei einem Ding als Einheit sind Änderungen egal. Eine Tomate bleibt dieselbe Tomate auch wenn ich sie blau anmale. Es geht um die Existenz des Dings
Hier betreibst Du lediglich Begriffsverschiebung. Meine Frage entsprechend umformuliert lautet: Was ist "Existenz"?
(und wie wird diese Begriff auf ein C++-Objekt zu übertragen sein?)BTW: Ich habe noch Einiges in meinen letzten Post geschrieben. Bitte lies das auch noch kurz, bevor Du antwortest.
Gruß,
Simon2.
-
Simon2 schrieb:
general bacardi schrieb:
...Zwei Objekte können nicht gleichzeitig die selben Speicherzellen belegen ...
Doch.
Mal ein paar Möglichkeiten:
- zu unterschiedlichen Zeitpunkten schon (nicht trivialer Einwand, wen man z.B. Multithreading und die technische Umsetzung von "Adresse holen" berücksichtigt)
- Betriebssysteme dürfen zeitgleich verschiedenen Anwendungen denselben Adressraum anbieten ... auch wenn er "physikalisch" durch unterschiedliche Komponenten abgebildet wird (=> selbe Adresse unterschiedliche Objekte)
- Betriebsysteme dürfen (und tun) Anwendungsadressräume "verschieben" (einfachstes Beispiel: Swapping) (=> "selbes Objekt" hat unterschiedliche "Adresse")Wenn du zusätzliche Dimensionen einbringst, ja. Gespiegelter Speicher zB hat die eigenschaft dass man dasselbe Objekt an verschiedenen Adressen findet. (Aber niemals zwei gleiche Pointer auf unterschiedliche Objekte zeigen) Dein C/C++ Programm weiss von alldem aber nichts.
Simon2 schrieb:
general bacardi schrieb:
...
Wenn ich "der Gleiche" von irgendwem wäre dann müßte es einen Doppelgänger geben....Du meinst also: Es gibt niemals "das Gleiche", sehe ich das richtig?
Ja, Streng genommen gibt es, wenns um materielle Dinge geht, nichts "rein gleiches". Immateriell schon, 2+2=4, wenn a dann b -und- wenn b dann a, usw.
http://de.wikipedia.org/wiki/Principium_identitatis_indiscernibiliumgeneral bacardi schrieb:
Meine Frage entsprechend umformuliert lautet: Was ist "Existenz"?
(und wie wird diese Begriff auf ein C++-Objekt zu übertragen sein?)Existenzbegriffe gibt es verschiedene. Mathematik hat einen, die Philosophie hat verschiedene. Für C/C++ muß noch einer erfunden werden.
-
general bacardi schrieb:
...Wenn du zusätzliche Dimensionen einbringst, ...
Das habe ich gar nicht. Du warst derjenige, der mit "Speicherzellen" um die Ecke kam.
general bacardi schrieb:
...Aber niemals zwei gleiche Pointer auf unterschiedliche Objekte zeigen...
Aber sicher: Niemand hindert ein Betriebssystem daran, zwei parlallel laufenden Anwendungen denselben Wertebereich als Anwendungsspeicher zur Verfügung zu stellen.
Wenn beide Anwendungen zur selben Zeit denselben Zeigerwert als Objektadresse ausgeben, werden sie nach Deiner Definition sicher NICHT auf "dasselbe Objekt" verweisen.general bacardi schrieb:
...
Existenzbegriffe gibt es verschiedene. ...Für C/C++ muß noch einer erfunden werden."Muss" vielleicht nicht ... aber ich behaupte auch nicht mehr als, dass genau dieser Begriff eben nicht vorhanden ist - und damit jede Aussage der Art "Ist doch vollkommen klar, wann etwas 'dasselbe Objekt' ist" nicht zutrifft.
Gruß,
Simon2.
-
Simon2 schrieb:
general bacardi schrieb:
...Wenn du zusätzliche Dimensionen einbringst, ...
Das habe ich gar nicht. Du warst derjenige, der mit "Speicherzellen" um die Ecke kam.
Die von dir erwähnten Dinge, Zeit, Betriebssystem, Multithreading, machen die Sache erst kompliziert.
Speicherzellen sind lange nicht sowas abstraktes, sondern etwas, mit dem C/C++ sehr gut umgehen kann.Simon2 schrieb:
general bacardi schrieb:
...Aber niemals zwei gleiche Pointer auf unterschiedliche Objekte zeigen...
Aber sicher: Niemand hindert ein Betriebssystem daran, zwei parlallel laufenden Anwendungen denselben Wertebereich als Anwendungsspeicher zur Verfügung zu stellen.
Wenn beide Anwendungen zur selben Zeit denselben Zeigerwert als Objektadresse ausgeben, werden sie nach Deiner Definition sicher NICHT auf "dasselbe Objekt" verweisen.Und wieder: Von virtuellem Speicher weiss ein C/C++ nichts. Wenn 2 Pointer in einem Programm zur gleichen Zeit den gleichen Inhalt haben, dann zeigen beide (innerhalb ihrer begrenzten Welt) auf DASSELBE objekt, oder auf eine andere Stelle im Speicher.
Simon2 schrieb:
general bacardi schrieb:
...
Existenzbegriffe gibt es verschiedene. ...Für C/C++ muß noch einer erfunden werden."Muss" vielleicht nicht ... aber ich behaupte auch nicht mehr als, dass genau dieser Begriff eben nicht vorhanden ist - und damit jede Aussage der Art "Ist doch vollkommen klar, wann etwas 'dasselbe Objekt' ist" nicht zutrifft.
Wir könnten versuchen einen neuen Zweig der Philosophie zu gründen, der sich mit C/C++ beschäftigt.
Aber das halte ich für Blödsinn.