Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Exemplarisches Beispiel Delphi nach c++ Builder, bitte

Empfohlene Antworten

Veröffentlicht

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.

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)

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

Vielen Dank!

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

Danke

dragi

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

: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

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.