Paar fragen zu klassen in C++
-
Hi,
ich habe ein paar frgaen zu klassen unter C++, ich komme aus der Delphi bereich aber muss jetzt mit C++ arbeiten, daher wollte ich wiesen wie paar sachen bei C++ gehen:1. class of so gennate "Class-reference types" das sieht bei Delphi folgende massen aus:
A = class(TObject); AClass = class of a;
wie geht das in C++?
2. Erstellen von klassen mit Klassen-Verweis-Typen z.b in Delphi geht es so:
A = class(TObject); AClass = class of a; B = class(A); function Createclass(ClassKind: AClass): A; begin Result := AClass.Create; end; //aufruf sieht dann so aus Createclass(B);
wie geht das in C++?
3. Class Methods das sind methoden die kann mann aufrufen ohne diese object zu erstellen, bsp:
type TFigure = class public class function Supports(Operation: string): Boolean; virtual; class procedure GetInfo(var Info: TFigureInfo); virtual; ... end; //aufruf sieht dann so aus TFigure.GetInfo(...
u. in C++?
wenn jemand mir weiter helfen könnte, wäre echt cool, ich hänge nähmlich ganz schon daran.
Danke
-
Hallo,
zu 1. und 2.:
Das gibt es nicht in C++. Wenn Du mit C++Bulder arbeitest, findest Du in der Online-Hilfe etwas zu __classid. C++Builder muss Metaklassen (so heißen diese Dinger) emulieren, um zu Delphi kompatibel zu sein.
Wenn Du mal genug Erfahrung mit C++ hast, kannst Du Dir Klassen entwickeln, die den Metaklassen von Delphi gleichen. Aber das ist nicht ganz ohne.
zu 3:
class TFigure { public: static void GetInfo(TFigureInfo& info); }; // Aufruf: TFigure::GetInfo(info);
Allerdings können Klassenmethoden in C++ nicht virtuell sein!
Gruß,
Andreas[ Dieser Beitrag wurde am 17.04.2003 um 12:52 Uhr von ags editiert. ]
-
Hi,
Gibt es eine andere möglichkeit so was realisieren ? Kann mann eine klasse irgendwie so erstellen ohne die typename zu verwenden?Danke
-
U. noch was mit
type TFigure = class public class function Supports(Operation: string): Boolean; virtual; class procedure GetInfo(var Info: TFigureInfo); virtual; ... end; //aufruf sieht dann so aus TFigure.GetInfo(...
habe ich was anderes gemieint, ich mach das an eine bsp deutlich:
TFigure = class public class function Supports(Operation: string): Boolean; virtual; class procedure GetInfo(var Info: TFigureInfo); virtual; ... end; proceudre beispiel(Operation: string); var test: boolean; begin test := TFigure.Supports(Operation); end;
in diese fall wird der methode aufgerufen, ohne eine object zu erstellen.
-
hallo,
zu:
"habe ich was anderes gemieint, ich mach das an eine bsp deutlich:
TFigure = class
public
class function Supports(Operation: string): Boolean; virtual;
class procedure GetInfo(var Info: TFigureInfo); virtual;
...
end;proceudre beispiel(Operation: string);
var
test: boolean;
begin
test := TFigure.Supports(Operation);
end;
"hat er doch richtig geantwortet, eine klassenmethode wird aufgerufen ohne davor eine instanz zu erstellen, in c++ werden klassenmethoden mit dem schlüsselwort static erzeugt, was soll er da falsch verstanden haben???
oder siehst du das irgendwo eine instanz erzeugt wurde...mfg
murph