Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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,B); -> 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)

Geschrieben

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 :)

Geschrieben

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

Geschrieben

: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

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...