ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Трансляція коду Delphi в код C + + Builder
         

     

    Інформатика, програмування

    Трансляція коду Delphi в код C + + Builder

    Введення

    Мета цієї статті полягає в тому, щоб допомогти вам зрозуміти основні відмінності і подібності між C + + і Object Pascal (мова, використовуваний в Delphi від Borland), і допомогти вам у перетворенні проекту написаного на Delphi в проект написаний на C + + (С + + Builder від Borland). В жалбнейшем в цій статті замість термінів Object Pascal і Delphi буде вживатися абревіатура "OP".

    Типи даних        

    Op         

    Розмір або значення         

    С + +             

    Shortlnt         

    ціле 8 біт         

    signed char             

    Smalllnt         

    ціле 16 біт         

    short             

    Longlnt         

    ціле 32 біта         

    int             

    Byte         

    ціле без знаку 8 біт         

    unsigned char             

    Word         

    ціле без знаку 16 біт         

    unsigned short             

    Integer         

    ціле 32 біта         

    int             

    Cardinal         

    ціле без знаку 32 біта         

    unsigned int             

    Boolean         

    true, false або         

    bool             

    ByteBool         

    true, false або ціле без   знаку 8 біт         

    unsigned char             

    WordBool         

    true, false або ціле без   знака 16 біт         

    unsigned short             

    LongBool         

    true, false або ціле без   знака 32 біта         

    BOOL (WinAPI)             

    AnsiChar         

    символ без знаку 8 біт         

    char             

    WideChar         

    символ UNICODE розміром в   слово         

    wchar_t             

    Char         

    символ без знаку 8 біт         

    char             

    AnsiString         

    AnsiString Delphi         

    AnsiString             

    String [n]         

    колишній стиль строк Delphi,   n = 1 .. 255 біт         

    SmallString             

    ShortString         

    колишній стиль строк Delphi,   255 біт         

    SmallString <255>             

    String         

    AnsiString Delphi         

    AnsiString             

    Single         

    число з плаваючою комою   32 біта         

    float             

    Double         

    число з плаваючою комою   64 біта         

    double             

    Extended         

    число з плаваючою комою   80 біт         

    long double             

    Real         

    число з плаваючою комою   32 біта         

    double             

    Pointer         

    родової покажчик 32 біта         

    void *             

    PChar         

    покажчик на символи 32   біта         

    unsigned char *             

    PAnsiChar         

    покажчик на символи ANSI   32 біта         

    unsigned char *             

    Comp         

    число з плаваючою комою   64 біта         

    Comp             

    OleVariant         

    значення variant OLE         

    OleVariant     

    Ключові слова

    Слід зазначити, що мова С + + є регістро залежним, на відміну від OP, який таким не є.        

    C + +             

    # define # elif # else # endif # error # if # ifdef # ifndef # include # line   # pragma # printf # undef auto break case catch char class const const_cast   continue default delete do double dynamic_cast else enum except extern false   finally float for friend goto if inline int long mutable namespace new   operator private protected public register reinterpret_cast return short   signed sizeof static static_cast struct switch template this throw true try   typedef typeid union unsigned using virtual void volatile while xalloc new   delete             

    OP             

    ABSOLUTE AND ARRAY ASM ASSEMBLER BOOLEAN BYTE CASE CHAR COMP CONST   CONSTRUCTOR DESTRUCTOR DIV DO DOUBLE DOWNTO ELSE EXTENDED EXTERNAL FALSE FAR   FILE FOR FORWARD FUNCTION GOTO IF IMPLEMENTATION IN INLINE INTEGER INTERFACE   INTERRUPT LABEL LONGINT MOD NEAR NIL NOT OBJECT OF OPERATOR OR PACKED PRIVATE   PROCEDURE PROGRAM REAL RECORD REPEAT SET SHL SHORTINT SHR SINGLE STRING TEXT   THEN TO TRUE TYPE UNIT UNTIL USES VAR VIRTUAL WHILE WITH WORD XOR     

    Операторні ознаки кінця

    C + +

    Багато вирази закінчуються крапкою з комою;

    Хоча є парочка винятків. Наприклад при підключенні заголовків файлів крапка з комою не потрібно

    # include "foo.h"// не закінчується крапкою з комою;

    # define MAXNAMELENGTH 35// також не закінчується крапкою з комою;

    OP

    Всі вираження закінчуються крапкою з комою;

    Оголошення змінних

    C + +

    Максимальна довжина змінної 32 символу - може бути і більше але будуть розпізнані тільки перші 32 символи.

    Змінні можуть бути оголошені у будь-якому місці коду, ну і відповідно змінні повинні бути обявлени до того місця де вони будуть використовуватися.

    // ... какойто код ...

    char sName [10];

    int iCount, iLoop, iValToReach;

    double dMaxLoan, dTotal;

    float fMaxRate = 123.875;

    OP

    Максимальна довжина змінної 63-символу може бути і більше але будуть розпізнані тільки перші 63 символи.

    Змінні повинні оголошуватимуться в блоці "var" спочатку процедури або функції або у визначенні об'єкта до оголошення функцій і процедур.Значенія змінних не можуть бути призначені всередині блоку var.

    // ... какойто код ...

    function PayBack_d (var dAmount: double): double;

    var

    iCount, iLoop, iValToReach: integer;

    dMaxLoan, dTotal, dMaxRate: double;

    begin

    dMaxRate: = 123.875;

    ...

    Строки

    C + +

    У C + + відсутня спеціальний тип рядків. Строки розглядаються як масиви символів, що закінчуються нульовим символом (''). Розмір рядка може бути необмежений (теоретично максимальний обсяг пам'яті) Рядок доступна через вказівник на перший символ в рядку. Значним рядки є адреса її першого символу. Таким чином можна сказати, що в C + + рядок є покажчиком - вказівкою на перший символ рядка. У цьому сенсі рядки подібні до масивів, тому що масив теж є покажчиком на свій перший елемент.Строка може бути оголошена або як масив символів, або як мінлива типу char *. Кожне з наведених нижче оголошень вірні:

    char sName [26];// 25 символів плюс NULL

    char psDemo [] = "Hello, there!";

    char * psDemo = new char [26];

    Для обробки рядків є ряд бібліотечних функцій. Основні з них strcat - конкатенація (склеювання) двох рядків, strcmp - порівняння двох рядків, strcpy - копіювання одного рядка в іншу, strstr - пошук в рядку заданої підрядка, strlen -- визначення довжини рядка, strupr - перетворення символів рядка до верхнього регістру, sprintf - побудова рядка за заданою рядку форматування і списку аргументів і ряд інших функцій.

    OP

    Delphi підтримує рядка практично необмеженої довжини (до 2 Гб), на додаток до 255-символьним рядках, відомим як pascal-рядка. Нова директива компілятора $ Н дозволяє контролювати зміст використання зарезервованого слова string. Стан цієї директиви за замовчуванням ($ Н +) має на увазі використання в якості типу string довгих рядків. $ Н-на увазі використання коротких 255-символьних pascal-рядків. Всі компоненти Delphi використовують довгі строкі.Следует відзначити, що, незалежно від стану директиви $ Н, якщо спеціфірована максимальна довжина рядка, менша 255, то мається на увазі короткий рядок (ShortString). Призначення довжини рядка з використанням квадратних дужок завжди має на увазі підтип ShortString. Довгі рядки, введені в Delphi 2.0, в більшості випадків сумісні з рядками старого типу. При цьому необхідно брати до уваги такі особливості їх використання:

    Пам'ять для довгих строк виділяється динамічно. Довгі рядки є покажчиками на рядки, збережені в хіпі (heap). Коли ви змінюєте довжину рядка, Delphi32 перерозподіляє пам'ять. Оскільки менеджер пам'яті намагається перевиделіть пам'ять в тій же самій області, він не завжди може це зробити. Тому, для збільшення довжини рядка, слід використовувати введену в Delphi 2.0 процедуру SetLength, перерозподіляють пам'ять, якщо це можливо

    Довгі рядки автоматично закінчуються # 0, тому ви можете використовувати ті методи роботи з цими рядками, які застосовували для обробки null-terminated string. Тому тепер відсутня необхідність використовувати функції конвертації, такі як StrPCopy, хоча Delphi і підтримує короткі строки

    Delphi підтримує лічильник використань для кожної довжиною рядка. Це означає, що якщо ваш додаток копіює рядок (наприклад, передаючи її як строкового параметра в процедуру), то автоматично збільшується кількість посилань на рядок. Коли закінчується використання черговий копії рядка, тобто, відбувається вихід за область видимості, лічильник використань автоматично зменшується. Коли лічильник використань стає рівним нулю, виділена під рядок пам'ять звільняється автоматично

    Оскільки реально довгі рядки не дублюються, а для них підтримуються лічильники використань, то присвоювання довгих рядків відбувається набагато швидше в порівнянні з короткими строкамі.Несмотря на те, що більша частина коду, що використовується при роботі з рядками інтероперабельності для коротких і довгих рядків (тобто застосовне до обох видів рядків), тим не менш, деякі операції над короткими рядками не застосовні до довгих рядках. Довгі рядки не можуть передаватися в параметри типу OpenString або як var-параметри, що відповідають коротким рядках.

    Масиви

    Масиви - впорядковані послідовності одного типу даних (можуть включати також і об'єкти). Методи для оголошення масиву в C + + і OP - різні.

    С + +

    Масиви "засновані на нулі" - перший елемент - Елемент [0], другий елемент елемент [1], третя - [2], і т.д. Це завжди заплутує новачків.

    Оголошення масиву:

    double Array [31];

    Використання:

    for (int i = 30, j = 29; i> 0; i -, j -)

    Array [i] = Array [j];

    OP

    Початок масиву в елементі 1 ... але не всегда.В Delphi зустрічаються компоненти і об'єкти "підстава на нулі" на зразок С + +. Наприклад TList елементи якого починаються з нуля. Будь-який масив який ви оголосіть буде заснований на одиниці

    var ArrayS: array [1 .. 31] of double;

    i, j: integer;

    begin

    j: = 30;

    for i: = 31 downto 2 do

    begin

    ArrayS [i] = ArrayS [j];

    Dec (j); (або j: = j-1;)

    end;

    ......

    Обидві мови підтримують багатовимірні масиви

    С + +

    double dMatrix [50] [20];

    OP

    dMatrix: array [1 .. 50, 1 .. 20] of double;

    Прирівнювання і порівняння змінних  

    C + +

    Порівняння проізводіттся оператором "подвійне одно "(==), прирівнювання одним одно (=)

    int i, j;

    if (i == j)// порівняння

    .....

    i = j;// прирівнювання

    ....

    OP

    Порівняння проізводіттся оператором "одно" (=), Прирівнювання двокрапка + одне одно (:=)

    ...

    if dMaxRate = 15.75 then

    begin ...

    dMaxRate: = 12.5;

    ...

    end;

    винятком із правил в OP є прирівнювання змінної до константі. У цьому випадку застосовується одиночне одно (=)

    Оголошення констант

    Константи - значення, які не змінюються. Ідентифікатор може бути оголошений як константа, і в C + + і OP. І C + + і OP констант повинні бути призначені значення при їх оголошенні.

    С + +

    При оголошенні константи перед типом даних використовується ключове слово const

    const int iMax = 2000;

    const double dMaxValue = 1234.75;

    У С + + константи також можна визначати через директиву препроцесора # define

    # define MAXA 1000

    але на практиці це застаріло. Так як компілятор не може виконати контролю відповідності типів (він не може визначити що це ini або double)

    OP

    Константи, подібно змінним, повинні бути оголошені в блоці коду "const" на початку визначення процедури або функції , ухвали або в декларації об'єкта.

    function PayBack_d (var dAmount: double): double;

    const iMAX = 2000; dMAXVALUE = 1234.75;

    var iCount, iLoop, iValToReach: integer;

    dMaxLoan, dTotal, dMaxRate: double;

    begin

    dMaxRate: = dMAXVALUE;

    {...}

    Функції та процедури

    Блоки Коду, які виконують певне завдання в C + +, Називаються "функціями" незалежно від того, чи дійсно вони повертають значення. У OP, функції повинні повертати значення, процедури не повертають значення. У C + +, всі функції повинні мати прототип, оголошений перед застосуванням (так що транслятор може порівнювати обидві функції, щоб гарантувати відповідність). У OP, однак, функція або визначення процедури можуть опустити (але це не бажано) параметри і опускати тип возвращенія.Декларація функції у C + + і визначень вимагає фігурних дужок () незалежно від того, чи дійсно будь-які параметри передаються. OP функції і процедури не мають потребу в фігурних дужках () при їх оголошенні або визначення, якщо не передається жодних параметрів, для виклику функції або процедури.

    С + +

    Декларації

    void Foo (double X);

    int Foo2 ();

    Реалізація

    void Foo (double X)

    (

    int Y = X;

    )

    int Foo2 ()

    (

    return 0;

    )

    OP

    Кожна функція і процедура повинні бути ідентифіковані включенням ключового слова "function" або "procedure" на початку кожного визначення.

    function IntSinceLastAddDate_d (var dAvailCash: double): double;

    procedure SetNewIntRate; (немає параметрів і значення, що повертається)

    ...

    function LoanC.IntSinceLastAddDate_d (var dAvailCash: double): double;

    var dSomething: double;

    begin

    ...

    result: = dSomething; (глобальна змінна "result" назанчается що повертається значенням!)

    end;

    procedure LoanC.SetNewIntRate;

    begin

    ...

    end;

    І C + + і OP можуть передавати параметри за значенням або за посиланням або передавати константи ...

    C + + за значенням ... double IntSinceLastAddDate_d (double dAvailCash);

    OP за значенням ... function IntSinceLastAddDate_d (dAvailCash: double): double;

    C + + за посиланням ... double IntSinceLastAddDate_d (double & dAvailCash);

    OP за посиланням ... function IntSinceLastAddDate_d (var dAvailCash: double): double;

    C + + константи ... double IntSinceLastAddDate_d (const double dAvailCash);

    OP константи ... function IntSinceLastAddDate_d (const dAvailCash: double): double;

    Конструкція with ... do

    Взагалі, C + + більш компактний ніж OP. Але, C + + не має інструкцію with ... do з ... Це невдало, тому що це дійсно - велика особливість OP. C + + код буде більш детальним у порівнянні з OP.

    У C + +, коли Ви повинні звернутися до членів даних, ви закінчуєте оператор подібно до цього ...

    poC.oStock.aoTradesLast130Days [0]. lVol = 0;

    poC.oStock.aoTradesLast130Days [0]. dHigh = 0;

    poC.oStock.aoTradesLast130Days [0]. dLow = 0;

    poC.oStock.aoTradesLast130Days [0]. dClose = 0;

    Але в OP, Ви можете робити це набагато менш читається, що роблячи так ...

    with poC.oStock.aoTradesLast130Days [0] do begin

    lVol: = 0;

    dHigh: = 0;

    dLow: = 0;

    dClose: = 0;

    end;

    В принципі в даний момент це виглядає досить коротко і ясно по стравненію з С + +. Але у випадку численних вкладених операторів часом виникає плутанина що з чим взаємодіє. Хоча ... як кажуть програмісти, які пишуть на OP, їм набагато легше орієнтуватися саме в такому типі записи (OP), ніж в типі З ++.

    Коментарі

    C + + підтримує 2 види коментарів:

    Однорядковий коментар

    // Це коментар

    І багаторядковий коментар

    /*

    А я багаторядковий коментар, хоча й перебуваю за все на одному рядку. Зате зайняв місця на 3 рядки.

    */

    OP на відміну від С + + підтримує 3 види коментарів. Це пов'язано з тим, що Borland при написанні Delphi вніс в мову Pascal дуже багато елементів з C + +. В часности додався однорядковий коментар як в С + +

    Однорядковий коментар

    // Це коментар

    І багаторядковий коментар

    (*

    А я багаторядковий коментар, хоча й перебуваю за все на одному рядку. Зате зайняв місця на 3 рядки.

    *)

    (

    І я багаторядковий коментар, але працюю тільки в OP

    )

    Керуючі конструкції (if, else, switch ...)

    Існує п'ять структур управління на обох мовах, і вони дуже подібні. Цей огляд займе багато місця.

    1. Конструкція if ... else

    C + +

    if (<логічне вираження>)// в дужках єдине вираження

    (

    ...

    )

    else if (<логічне вираження>)

    (

    ...

    )

    else

    (

    ...

    )

    OP

    if <логічний вираз> then

    begin

    (єдине вираження не повинна перебувати в дужках)

    ...

    end

    else if <логічний вираз> then

    begin

    ....

    end

    else

    begin

    ...

    end; (тільки самий останній "end" у виразі термініруется крапкою з комою)

    2. Конструкція switch/case

    C + +

    switch (<цілочисельних константа>)

    (

    case iX: ... break;

    case iY: ... break;

    default: ...

    )

    OP

    case <цілочисельних вираз мінлива або константа> of

    (тут "begin" не потрібен)

    iX:

    begin

    ...

    end; (крапку з комою після кожного "end ";}

    iY:

    begin

    ...

    end;

    else (двокрапка не вимагається)

    begin

    ...

    end;

    end; (ось тут "end;")

    3. Цикл for

    C + +

    for (iCount = 0; iCount <= 10; iCount ++)

    (

    // інкреметн потрібен для циклу, iCount + +, може бути збільшений

    // на будь-який значний не тільки на 1

    ...

    break;// для виходу з циклу

    continue;// для продовження циклу

    ...

    )

    OP

    for iCount: = 1 to 10 do

    begin

    ... (цикл for може збільшувати лічильник тільки на 1)

    break; (для виходу з циклу)

    continue; (для продовження циклу)

    ...

    end;

    Є одна різниця між виконанням "break" і "continue" в мовах. У C + +, break, і continue - ключові слова -- частина мови;

    У OP це бібліотечні процедури.Хотя використовуються також.

    4. Цикл while

    C + +

    while (<логічне вираження>)

    (

    // вираз перевіряється на самому початку циклу, так що код ніколи не може використовуватися

    // якщо вираз поверне false

    ...

    break;// для виходу з циклу

    continue;// для продовження циклу

    ...

    )

    OP

    while <логічний вираз> do

    begin

    (вираз перевіряється на самому початку циклу, так що код ніколи не може використовуватися

    якщо вираз поверне false)

    ...

    break; (для виходу з циклу)

    continue; (для продовження циклу)

    ...

    end;

    5. Цикл do ... while

    5) The do/repeat ... loop construct:

    C + +

    do

    (

    // виконуємо?? ться якийсь код, потім перевіряється вираз. У цьому випадку код виконається хоча б один раз

    ...

    break;// для виходу з циклу

    continue;// для продовження циклу

    ...

    ) while (<логічне вираження >);

    OP

    repeat

    (eвиполняется якийсь код, потім перевіряється вираз. У цьому випадку код виконається хоча б один раз

    зауважте що в циклі немає ключових слів begin ... end)

    ...

    break; (для виходу з циклу)

    continue; (для продовження циклу)

    ...

    until <логічне вираження>;

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://www.realcoding.net/

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status