Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Objekt - und Methodenzeiger in C++ (https://www.delphipraxis.net/35436-objekt-und-methodenzeiger-c.html)

Dannyboy 7. Dez 2004 09:22


Objekt - und Methodenzeiger in C++
 
Hallo Freunde des C++,
Was ich an Delphi so sehr schätze, seitdem ich auch C++ programmiere ist, dass alles syntaktisch sehr schön übersichtlich und einfach oder zumindest nachlesbar ist. Das Schlüsselwort NIL hilft sehr bei Zeigerarithmetik.

Leider scheint man in C++ von dieser Einfachheit nicht viel zu halten. Es gibt hier ein definiertes Makro NULL, aber das kann nur auf einfache Zeiger, nicht aber für Methodenzeiger oder Objektzeiger verwendet werden. Ich würde gern wissen, wie man in C++ ...

- Ein Objekt auf null/nil prüfen kann :gruebel:
- Ein Objekt den Zustand null/nil zuweisen kann :gruebel:
- Zeiger-Methodenergebnisse (z.B. int *count()) auf null/nil prüfen kann. :gruebel:

Kann mir da jemand helfen? :gruebel:

Greetz’n cheatz

DANNYBOY

Muetze1 7. Dez 2004 10:28

Re: Objekt - und Methodenzeiger in C++
 
Moin!

Code:
  TKlasse *myInstance = NULL;

  myInstance = new TKlasse();

  if ( myInstance ) // ist das gleiche wie != NULL bzw. If Assigned()
  {
    // angelegt
  }
  else
    // nicht angelegt

  delete myInstance;
  myInstance = NULL; // warum sollte dies nicht gehen?
MfG
Muetze1

negaH 7. Dez 2004 12:23

Re: Objekt - und Methodenzeiger in C++
 
er wird wohl mit statisch allozierten Objecten gearbeitet haben ?! ;)

Gruß Hagen

Dannyboy 7. Dez 2004 14:06

Re: Objekt - und Methodenzeiger in C++
 
Hallo Jungs,
ich habe statische Objekte, genau. Muss ich etwa dynamische Instanzen verwenden um das dann so zu machen, wie Muetze :gruebel:

Fein, danke, dann mach' ich das eben so. Danke schon mal dafür. Ich bin nun einen entscheidenden Schritt weiter. :thumb:
Wie sieht's nun aus mit den Methodenzeigern? Wie prüfe ich da die Ergebnissse auf Null? :gruebel:

Oxmyx 7. Dez 2004 14:42

Re: Objekt - und Methodenzeiger in C++
 
Wenn du eine statische Instanz einer Klasse oder einer Struktur hast, kannst du schon aus dem Grund nicht auf NULL prüfen, weil es ja eben kein Zeiger ist (ein Punkt, wo Delphi noch Nachholbedarf hat).

Und da ein Zeiger im Prinzip nur ein int ist, und NULL gleichbedeutend mit 0 ist, kannst du auch einen Funktionszeiger auf NULL testen:
Code:
int (* count)(void);
kannst du einfach mit
Code:
if(count != NULL)
oder kürzer mit
Code:
if(count)
auf Gültigkeit testen.

Ich bin mir jetzt aber nicht sicher, was du mit "Ergebnissen von Methodenzeigern" meinst. Den Rückgabewert von einer Methode kannst du doch ganz gewöhnlich prüfen.

Ein Methodenzeiger an sich ist ja aber schon sehr ungewöhnlich, da man nicht so leicht auf eine Memberfunktion einer Klasse zeigen kann.
Zuerst muss man mal den Zeigertyp definieren, z.B.:
Code:
int (Klasse::* p_methode)(void);
Jetzt muss man den Methodenzeiger auf die Funktion der Klasse zeigen lassen:
Code:
p_methode = &Klasse::methode;
Und aufrufen kann man die Methode dann mit:
Code:
Klasse eineInstanz;
int i = (eineInstanz.*p_methode)(void);
Den Methodenzeiger kann man ebenfalls wieder mit NULL auf Gültigkeit prüfen.

Ich bezweifle aber, dass das das war, was du wissen wolltest, da ein Methodenzeiger wohl zu den Dingen gehört, die man nie braucht...


Eine dynamische Instanz eines Objekts kannst du natürlich wie gewöhnlich prüfen:
Code:
Klasse *instanz;
instanz = new Klasse;
if(instanz == NULL)
{
  // Fehler!
}

Muetze1 7. Dez 2004 16:05

Re: Objekt - und Methodenzeiger in C++
 
Moin!

Zum aller letzten Beispiel von Oxmyx:

nicht lieber so herum?
Code:
Klasse *instanz;
instanz = new Klasse;
if(instanz == NULL)
{
  // Fehler!
}
MfG
Muetze1

Oxmyx 7. Dez 2004 16:33

Re: Objekt - und Methodenzeiger in C++
 
Ups, natürlich, du hast Recht. Ich hab grad mit Delphi programmiert, da hatte ich die Reihenfolge grad noch anders drin. ;)

Chewie 7. Dez 2004 17:45

Re: Objekt - und Methodenzeiger in C++
 
Zitat:

Zitat von Oxmyx
(ein Punkt, wo Delphi noch Nachholbedarf hat).

Naja, du kannst aucb TurboPascal-Objekte nehmen, da hast du auch statische Stackobjekte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz