AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Pointer auf Objekte beliebiger Klassen (C++)
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer auf Objekte beliebiger Klassen (C++)

Ein Thema von Torpedo · begonnen am 15. Sep 2008 · letzter Beitrag vom 15. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#1

Pointer auf Objekte beliebiger Klassen (C++)

  Alt 15. Sep 2008, 16:14
Hallo,
ich frage mich gerade ob ich einen Zeiger erstellen kann, der auf verschiedene Klassen zeigen kann.

Ich habe z.B. die Klassen
  • cTier
  • cKatze (erbt von cTier)
  • cHund (erbt von cTier)
  • cFisch (erbt von cTier)
  • cGoldfisch (erbt von cFisch)

Und jetzt habe ich z.B. eine Klasse cPerson mit einer Zeiger-Variable "Haustier", welche auf ein beliebiges Tier zeigen soll.

Wie geht das?

Also ungefähr so:

cTier *lieblingstier = new cGoldfisch("Goldi");

Geht aber leider nicht.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Pointer auf Objekte beliebiger Klassen (C++)

  Alt 15. Sep 2008, 16:16
Versuch mal zu casten
Markus Kinzler
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#3

Re: Pointer auf Objekte beliebiger Klassen (C++)

  Alt 15. Sep 2008, 16:18
Dann muss ich aber wissen welche Klasse es ist und das weiß ich nicht.
Kann man das irgendwie herausfinden?
  Mit Zitat antworten Zitat
xy124

Registriert seit: 3. Dez 2007
146 Beiträge
 
Delphi 7 Personal
 
#4

Re: Pointer auf Objekte beliebiger Klassen (C++)

  Alt 15. Sep 2008, 16:22
ich glaub der fehler ist das leerzeichen und der stern
Zitat:
cTier *lieblingstier = new cGoldfisch("Goldi");
ist falsch.
probier' mal
Code:
cTier* lieblingstier = new cGoldfisch("Goldi");
^^der stern muss hinter den klassenname und nicht vor den objektname!
o o
LJ
TTT
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#5

Re: Pointer auf Objekte beliebiger Klassen (C++)

  Alt 15. Sep 2008, 16:26
Funktioniert leider auch nicht.

BTW: Ich schreibe den Stern oft am Klassenname, oft an der Variable und oft dazwischen. Funktioniert eigentlich immer wie erwartet.
Macht wohl keinen Unterschied...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Pointer auf Objekte beliebiger Klassen (C++)

  Alt 15. Sep 2008, 16:27
Zitat von Torpedo:
Dann muss ich aber wissen welche Klasse es ist und das weiß ich nicht.
Kann man das irgendwie herausfinden?
Musst du nicht

Code:
cTier *lieblingstier = (cTier)new cGoldfisch("Goldi");
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#7

Re: Pointer auf Objekte beliebiger Klassen (C++)

  Alt 15. Sep 2008, 16:38
Ja hier geht es, aber das soll mal alles dynamisch zugewiesen werden. Da weiß ich dann nicht mehr wie.

Beispiel

Code:
void setLieblingstier( ???? tier )
{
   lieblingstier = (cTier)tier;
}


??? getLieblingstier()
{
   return (???)lieblingstier;
}
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Pointer auf Objekte beliebiger Klassen (C++)

  Alt 15. Sep 2008, 16:42
Code:
void setLieblingstier( ctier *tier )
{
   lieblingstier = tier;
}


ctier getLieblingstier()
{
   return lieblingstier;
}
Markus Kinzler
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#9

Re: Pointer auf Objekte beliebiger Klassen (C++)

  Alt 15. Sep 2008, 16:47
Kann ich denn auch ein cGoldfisch übergeben, wenn die Funktion ein cTier erwartet?
Ich dachte das getestet zu haben. Da ging es nicht...

Edit: Ja, mit cast

Aber irgendwann muss sich wissen was es für eine Klasse ist, sonst kann ich die Funktionen, die nur zu der Klasse gehören nicht benutzen...
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#10

Re: Pointer auf Objekte beliebiger Klassen (C++)

  Alt 15. Sep 2008, 17:03
Zitat von Torpedo:
Wie geht das?

Also ungefähr so:

cTier *lieblingstier = new cGoldfisch("Goldi");
Genau so.


Zitat von Torpedo:
Geht aber leider nicht.
Warum nicht?
Kann es sein, daß du übersehen hast, daß Basisklassen standardmäßig private sind und explizit als public deklariert werden müssen?

Code:
class cTier { ... };
class cGoldfisch : public cTier { ... };

Zitat von xy124:
ich glaub der fehler ist das leerzeichen und der stern Wink
Zitat:
cTier *lieblingstier = new cGoldfisch("Goldi");
ist falsch.
probier' mal
Code: markieren
cTier* lieblingstier = new cGoldfisch("Goldi");

^^der stern muss hinter den klassenname und nicht vor den objektname!
Unfug. Ob zwischen Operatoren und Bezeichnern Leerzeichen sind, ist vollkommen irrelevant, wie in Delphi übrigens auch.


Zitat von jfheins:
cTier *lieblingstier = (cTier)new cGoldfisch("Goldi");
Was genau hast du da vor? cGoldfisch -> cTier -> cTier*?


Zitat von Torpedo:
Aber irgendwann muss sich wissen was es für eine Klasse ist, sonst kann ich die Funktionen, die nur zu der Klasse gehören nicht benutzen...
Dafür gibt es dynamic_cast<>.

Der Cast nach der Art (Typ)Ausdruck nennt sich "C-Cast" und ist in C++ zu Recht verpönt. Man nehme static_cast<> oder dynamic_cast<>.
Moritz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 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