dragi Geschrieben 12. Mai 2004 Geschrieben 12. Mai 2004 Hallo, ich bin Azubi zum AW und beschäftige mich eigentlich überwiegend mit Delphi. Jetzt soll ich aber ein Programm im c++ Builder schreiben und meine Frage ist ob mir jemand exemplarisch zeigen kann, wie ich unten abgebildete Klasse aus Delphi im c++ Builder schreibe damit ich einmal gesehen habe wie man so eine Klasse aufbaut bitte: unit u_CVClasses; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TCaesar = class(TObject) private protected public function encode(s: string; delta: integer): string; function decode(s: string; delta: integer): string; published end; implementation { TCaesar } function TCaesar.decode(s: string; delta: integer): string; var P: PChar; tmp: String; iDelta: Integer; iRealDelta: Integer; iNewOrd: Integer; begin tmp := ''; iDelta := delta; iRealDelta := 26; p := pointer(s); if P <> nil then while P^ <> #0 do begin if P^ in ['a'..'z', 'A'..'Z'] then begin iNewOrd := Ord(P^) - iDelta; if iNewOrd > 122 then Inc(iNewOrd, iRealDelta); if iNewOrd < 97 then iNewOrd := iNewOrd + 26; tmp := tmp + Chr(iNewOrd); end else tmp := tmp + P^; Inc(P); end; Result := tmp; end; function TCaesar.encode(s: string; delta: integer): string; var P: PChar; tmp: String; iDelta: Integer; iRealDelta: Integer; iNewOrd: Integer; begin tmp := ''; iDelta := delta; iRealDelta := 26; p := pointer(s); if P <> nil then while P^ <> #0 do begin if P^ in ['a'..'z', 'A'..'Z'] then begin iNewOrd :=Ord(P^) + iDelta; if iNewOrd > 122 then Dec(iNewOrd, iRealDelta); tmp := tmp + Chr(iNewOrd); end else tmp := tmp + P^; Inc(P); end; Result := tmp; end; end. Zitieren
Klotzkopp Geschrieben 12. Mai 2004 Geschrieben 12. Mai 2004 Ich kenne mich nicht so gut mit den Borland-Erweiterungen aus, aber ich habe vor kurzem ein Pascalprogramm nach C++ portiert, das ist zumindest verwandt. Ohne Gewähr: // unit u_CVClasses; ??? // interface ??? /* uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; */ // Das musst du vermutlich mit #include-Direktiven lösen // type // TCaesar = class(TObject) class TCaesar : public TObject { // private // protected // public public: // function encode(s: string; delta: integer): string; AnsiString encode(const AnsiString& s, int delta); // function decode(s: string; delta: integer): string; AnsiString decode(const AnsiString& s, int delta); // published ??? // end; }; // implementation ??? // { TCaesar } ??? //function TCaesar.decode(s: string; delta: integer): string; AnsiString TCaesar::decode(const AnsiString& s, int delta) { //var // P: PChar; const char* P; // tmp: String; AnsiString tmp; // iDelta: Integer; int iDelta; // iRealDelta: Integer; int iRealDelta; // iNewOrd: Integer; int iNewOrd; //begin // das ist die geschweifte Klammer oben // tmp := ''; tmp = ""; // sollte nicht nötig sein // iDelta := delta; iDelta = delta; // iRealDelta := 26; iRealDelta = 26; // p := pointer(s); P = s.c_str(); // if P <> nil then if(P) { // while P^ <> #0 do while(*P) // begin { // if P^ in ['a'..'z', 'A'..'Z'] then if((*P>='a' && *P<='z') || (*P>='A' && *P<='Z')) // begin { // iNewOrd := Ord(P^) - iDelta; iNewOrd = *P - iDelta; // if iNewOrd > 122 then if(iNewOrd > 122) // Inc(iNewOrd, iRealDelta); iNewOrd += iRealDelta; // if iNewOrd < 97 then if(iNewOrd < 97) // iNewOrd := iNewOrd + 26; iNewOrd += 26; // tmp := tmp + Chr(iNewOrd); tmp += static_cast<char>(iNewOrd); // end else } else // tmp := tmp + P^; tmp += *P; // Inc(P); ++P; // end; } // Result := tmp; return tmp; //end; } [/code] Als grobe Richtschnur kannst du folgende Ersetzungen vornehmen: := -> = begin -> { end;-> } if Bedingung then -> if(Bedingung) P^ -> *P Inc(a,; -> a += b; function Name(Param1: Typ1, Param2: Typ2) : FuncTyp -> FuncTyp Name(Typ1 Param1, Typ2 Param2) for i := 0 to 255 do -> for(i=0; i<=255; ++i) Zitieren
PuppetMaster Geschrieben 12. Mai 2004 Geschrieben 12. Mai 2004 im C++ Builder sieht das ganze so aus: Erst mal eine neue Unit (Datei->Neu->Unit) Davon dann die Header-Datei öffnen (rechtsklick auf den Reiter "Unit1.cpp" "Quell/Header-Datei öffnen" klicken) dort dann zwischen #define und #endif folgender Code class TCaesar { private: protected: public: TCaesar(); //Konstruktor ~TCaesar(); //Destruktor AnsiString encode(AnsiString s, int delta); AnsiString decode(AnsiString s, int delta); published: }; [/php] in der *.cpp Datei dann unter dem #include "Unit1.h" [php] TCaesar::TCaesar() { } TCaesar::~TCaesar() { } AnsiString TCaesar::encode(AnsiString s, int delta) { char* P = s.c_str(); //c_str() wandelt AnsiString in char* um AnsiString tmp = ""; int iDelta = delta; int iRealDelta = 26; int iNewOrd; if(P != "") { while(P++ != 0) //glaube ich zumindest { //tja und ab hier weiß ich leider auch nicht weiter, dafür kenn ich michleider nicht gut genug aus } } return tmp; } AnsiString TCaesar::decode(AnsiString s, int delta) { // Hie dann das gleiche wie in encode machen bzw halt decode in C++ umsetzten } Aber ich denke den rest schaffst du bestimmt auch alleine, oder jemand hier im Forum macht den rest Zitieren
dragi Geschrieben 12. Mai 2004 Autor Geschrieben 12. Mai 2004 Vielen Dank! Den genauen Code brauch ich auch nicht wichtig war mir der Aufbau! Und damit kann ich jetzt wenigstens etwas anfangen. Danke dragi Zitieren
dragi Geschrieben 12. Mai 2004 Autor Geschrieben 12. Mai 2004 Ich bins nochmal Ich such schon die ganze Zeit nach einem äquivalent zu if P* in ['a'..'z', 'A'..'Z'] then irgendwie scheint es nichts vergleichbares in c++ zu geben?! Wie prüft ihr c++ler denn ob der Inhalt einer Variable sich in einem bestimmten definierten Bereich befindet? Also z.B. in a-z? Danke dragi Zitieren
Klotzkopp Geschrieben 12. Mai 2004 Geschrieben 12. Mai 2004 Äh, das hab ich oben doch geschrieben... Zitieren
dragi Geschrieben 12. Mai 2004 Autor Geschrieben 12. Mai 2004 :confused: I´m sorry War heute irgendwie alles ein heiloses durcheinander...hast natürlich vollkommen Recht das es schon da stand!!! ...bin dann jetzt auch ruhig und vielen vieln Dank nochmal!!! Dragi Zitieren
Argbeil Geschrieben 13. Mai 2004 Geschrieben 13. Mai 2004 Du kannst noch was schöneres machen. Die Objektdateien von Delphi und Builder sind kompatibel, du kannst die Sprachen also mischen. Einfach die Klasse in Delphi programmieren, kompilieren und im Builder einbinden, fast wie bei .NET. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.