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

Vielen Dank!

Den genauen Code brauch ich auch nicht wichtig war mir der Aufbau! Und damit kann ich jetzt wenigstens etwas anfangen.

Danke

dragi

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...