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


Anmelden zum Antworten