p>
ShortString p>
колишній стиль строк Delphi,
255 біт p>
SmallString <255> p>
String p>
AnsiString Delphi p>
AnsiString p>
Single p>
число з плаваючою комою
32 біта p>
float p>
Double p>
число з плаваючою комою
64 біта p>
double p>
Extended p>
число з плаваючою комою
80 біт p>
long double p>
Real p>
число з плаваючою комою
32 біта p>
double p>
Pointer p>
родової покажчик 32 біта p>
void * p>
PChar p>
покажчик на символи 32
біта p>
unsigned char * p>
PAnsiChar p>
покажчик на символи ANSI
32 біта p>
unsigned char * p>
Comp p>
число з плаваючою комою
64 біта p>
Comp p>
OleVariant p>
значення variant OLE p>
OleVariant p>
Ключові слова b>
p>
Слід зазначити, що мова С + + є регістро
залежним, на відміну від OP, який таким не є. p>
C + + p>
# 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 p>
OP p>
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 p>
Операторні ознаки кінця b>
p>
C + + p>
Багато вирази закінчуються крапкою з комою; p>
Хоча є парочка винятків. Наприклад при
підключенні заголовків файлів крапка з комою не потрібно p>
# include "foo.h"// не закінчується крапкою
з комою; p>
# define MAXNAMELENGTH 35//
також не закінчується крапкою з комою; p>
OP p>
Всі вираження закінчуються крапкою з комою; p>
Оголошення змінних
p>
C + + p>
Максимальна довжина змінної 32 символу - може бути
і більше але будуть розпізнані тільки перші 32 символи. p>
Змінні можуть бути оголошені у будь-якому місці коду, ну
і відповідно змінні повинні бути обявлени до того місця де вони будуть
використовуватися. p>
// ... какойто код ... p>
char sName [10]; p>
int iCount, iLoop,
iValToReach; p>
double dMaxLoan,
dTotal; p>
float fMaxRate =
123.875; p>
OP p>
Максимальна довжина змінної 63-символу може бути і більше але будуть
розпізнані тільки перші 63 символи. p>
Змінні повинні оголошуватимуться в блоці "var"
спочатку процедури або функції або у визначенні об'єкта до оголошення функцій і
процедур.Значенія змінних не можуть бути призначені всередині блоку var. p>
// ... какойто код ... p>
function
PayBack_d (var dAmount: double): double; p>
var p>
iCount, iLoop,
iValToReach: integer; p>
dMaxLoan, dTotal,
dMaxRate: double; p>
begin p>
dMaxRate: =
123.875; p>
... p>
Строки b>
p>
C + + p>
У C + + відсутня спеціальний тип рядків. Строки
розглядаються як масиви символів, що закінчуються нульовим символом ('').
Розмір рядка може бути необмежений (теоретично максимальний обсяг пам'яті) Рядок доступна через вказівник на перший
символ в рядку. Значним рядки є адреса її першого символу. Таким
чином можна сказати, що в C + + рядок є покажчиком - вказівкою на
перший символ рядка. У цьому сенсі рядки подібні до масивів, тому що масив
теж є покажчиком на свій перший елемент.Строка може бути оголошена або
як масив символів, або як мінлива типу char *. Кожне з наведених нижче
оголошень вірні: p>
char sName [26];//
25 символів плюс NULL p>
char psDemo [] = "Hello, there!"; p>
char * psDemo = new char [26]; p>
Для обробки
рядків є ряд бібліотечних функцій. Основні з них strcat - конкатенація
(склеювання) двох рядків, strcmp - порівняння двох рядків, strcpy - копіювання
одного рядка в іншу, strstr - пошук в рядку заданої підрядка, strlen --
визначення довжини рядка, strupr - перетворення символів рядка до верхнього
регістру, sprintf - побудова рядка за заданою рядку форматування і
списку аргументів і ряд інших функцій. p>
OP p>
Delphi підтримує
рядка практично необмеженої довжини (до 2 Гб), на додаток до
255-символьним рядках, відомим як pascal-рядка. Нова директива компілятора
$ Н дозволяє контролювати зміст використання зарезервованого слова
string. Стан цієї директиви за замовчуванням ($ Н +) має на увазі використання
в якості типу string довгих рядків. $ Н-на увазі використання коротких
255-символьних pascal-рядків. Всі компоненти Delphi використовують довгі
строкі.Следует відзначити, що, незалежно від стану директиви $ Н, якщо
спеціфірована максимальна довжина рядка, менша 255, то мається на увазі
короткий рядок (ShortString). Призначення довжини рядка з використанням
квадратних дужок завжди має на увазі підтип ShortString. Довгі рядки,
введені в Delphi 2.0, в більшості випадків сумісні з рядками старого
типу. При цьому необхідно брати до уваги такі особливості їх використання: p>
Пам'ять для довгих
строк виділяється динамічно. Довгі рядки є покажчиками на рядки,
збережені в хіпі (heap). Коли ви змінюєте довжину рядка, Delphi32
перерозподіляє пам'ять. Оскільки менеджер пам'яті намагається перевиделіть пам'ять
в тій же самій області, він не завжди може це зробити. Тому, для збільшення
довжини рядка, слід використовувати введену в Delphi 2.0 процедуру SetLength,
перерозподіляють пам'ять, якщо це можливо p>
Довгі рядки
автоматично закінчуються # 0, тому ви можете використовувати ті методи роботи
з цими рядками, які застосовували для обробки null-terminated string.
Тому тепер відсутня необхідність використовувати функції конвертації,
такі як StrPCopy, хоча Delphi і
підтримує короткі строки p>
Delphi підтримує лічильник використань для кожної
довжиною рядка. Це означає, що якщо ваш додаток копіює рядок (наприклад,
передаючи її як строкового параметра в процедуру), то автоматично
збільшується кількість посилань на рядок. Коли закінчується використання
черговий копії рядка, тобто, відбувається вихід за область видимості, лічильник
використань автоматично зменшується. Коли лічильник використань стає
рівним нулю, виділена під рядок пам'ять звільняється автоматично p>
Оскільки реально
довгі рядки не дублюються, а для них підтримуються лічильники використань,
то присвоювання довгих рядків відбувається набагато швидше в порівнянні з
короткими строкамі.Несмотря на те, що більша частина коду, що використовується при
роботі з рядками інтероперабельності для коротких і довгих рядків (тобто
застосовне до обох видів рядків), тим не менш, деякі операції над короткими
рядками не застосовні до довгих рядках. Довгі рядки не можуть передаватися в
параметри типу OpenString або як var-параметри, що відповідають коротким
рядках. p>
Масиви h2>
Масиви - впорядковані послідовності одного типу
даних (можуть включати також і об'єкти). Методи для оголошення масиву в C + + і
OP - різні. P>
С + + p>
Масиви "засновані на нулі" - перший елемент
- Елемент [0], другий елемент елемент [1], третя - [2], і т.д. Це завжди
заплутує новачків. p>
Оголошення масиву: p>
double Array [31]; p>
Використання: p>
for (int i = 30, j =
29; i> 0; i -, j -) p>
Array [i]
= Array [j]; p>
OP p>
Початок масиву в елементі 1 ... але не всегда.В Delphi
зустрічаються компоненти і об'єкти "підстава на нулі" на зразок С + +.
Наприклад TList елементи якого починаються з нуля. Будь-який масив який ви
оголосіть буде заснований на одиниці p>
var ArrayS: array [1 .. 31] of double; p>
i, j: integer; p>
begin p>
j: = 30; p>
for i: = 31 downto 2 do p>
begin p>
ArrayS [i] = ArrayS [j]; p>
Dec (j); (або j: = j-1;) p>
end; p>
...... p>
Обидві мови підтримують багатовимірні масиви p>
С + + p>
double dMatrix [50]
[20]; p>
OP p>
dMatrix:
array [1 .. 50, 1 .. 20] of double; p>
Прирівнювання і порівняння змінних
p>
C + + p>
Порівняння проізводіттся оператором "подвійне
одно "(==), прирівнювання одним одно (=) p>
int i, j; p>
if (i == j)// порівняння p>
..... p>
i = j;// прирівнювання p>
.... p>
OP p>
Порівняння проізводіттся оператором "одно"
(=), Прирівнювання двокрапка + одне одно (:=) p>
... p>
if dMaxRate = 15.75
then p>
begin ... p>
dMaxRate: = 12.5; p>
...
p>
end; p>
винятком із правил в OP є прирівнювання
змінної до константі. У цьому випадку застосовується одиночне одно (=) p>
Оголошення констант b>
p>
Константи - значення, які не змінюються.
Ідентифікатор може бути оголошений як константа, і в C + + і OP. І C + + і OP
констант повинні бути призначені значення при їх оголошенні. p>
С + + p>
При оголошенні константи перед типом даних
використовується ключове слово const p>
const int iMax =
2000; p>
const double
dMaxValue = 1234.75; p>
У С + + константи також можна визначати через директиву
препроцесора # define p>
# define MAXA 1000 p>
але на практиці це застаріло. Так як компілятор не
може виконати контролю відповідності типів (він не може визначити що це ini
або double) p>
OP p>
Константи, подібно змінним, повинні бути оголошені в
блоці коду "const" на початку визначення процедури або функції
, ухвали або в декларації об'єкта. p>
function
PayBack_d (var dAmount: double): double; p>
const iMAX = 2000; dMAXVALUE = 1234.75; p>
var iCount, iLoop, iValToReach: integer; p>
dMaxLoan, dTotal, dMaxRate: double; p>
begin p>
dMaxRate: = dMAXVALUE; p>
{...} p>
Функції та процедури
p>
Блоки Коду, які виконують певне завдання в C
+ +, Називаються "функціями" незалежно від того, чи дійсно вони
повертають значення. У OP, функції повинні повертати значення, процедури не
повертають значення. У C + +, всі функції повинні мати прототип, оголошений
перед застосуванням (так що транслятор може порівнювати обидві функції, щоб
гарантувати відповідність). У OP, однак, функція або визначення процедури
можуть опустити (але це не бажано) параметри і опускати тип возвращенія.Декларація
функції у C + + і визначень вимагає фігурних дужок () незалежно від того,
чи дійсно будь-які параметри передаються. OP функції і процедури не
мають потребу в фігурних дужках () при їх оголошенні або визначення, якщо не
передається жодних параметрів, для виклику функції або процедури. p>
С + + p>
Декларації p>
void Foo (double X); p>
int Foo2 (); p>
Реалізація p>
void Foo (double X) p>
( p>
int Y = X; p>
) p>
int Foo2 () p>
( p>
return 0; p>
) p>
OP p>
Кожна функція і процедура повинні бути
ідентифіковані включенням ключового слова "function" або
"procedure" на початку кожного визначення. p>
function
IntSinceLastAddDate_d (var dAvailCash: double): double; p>
procedure SetNewIntRate; (немає параметрів і
значення, що повертається) p>
... p>
function
LoanC.IntSinceLastAddDate_d (var dAvailCash: double): double; p>
var dSomething: double; p>
begin p>
... p>
result: =
dSomething; (глобальна змінна "result" назанчается що повертається значенням!) p>
end; p>
procedure
LoanC.SetNewIntRate; p>
begin p>
... p>
end; p>
І C + + і OP можуть передавати параметри за значенням або
за посиланням або передавати константи ... p>
C + + за значенням ... double
IntSinceLastAddDate_d (double dAvailCash); p>
OP за значенням ... function
IntSinceLastAddDate_d (dAvailCash: double): double; p>
C + + за посиланням ... double
IntSinceLastAddDate_d (double & dAvailCash); p>
OP за посиланням ... function
IntSinceLastAddDate_d (var dAvailCash: double): double; p>
C + + константи ... double IntSinceLastAddDate_d (const double
dAvailCash); p>
OP константи ... function IntSinceLastAddDate_d (const
dAvailCash: double): double; p>
Конструкція with ... do
p>
Взагалі, C + + більш компактний ніж OP. Але, C + + не має
інструкцію with ... do з ... Це
невдало, тому що це дійсно - велика особливість OP. C + + код буде більш детальним у порівнянні з OP. P>
У C + +, коли Ви повинні звернутися до членів даних, ви
закінчуєте оператор подібно до цього ... p>
poC.oStock.aoTradesLast130Days [0]. lVol
= 0; p>
poC.oStock.aoTradesLast130Days [0]. dHigh
= 0; p>
poC.oStock.aoTradesLast130Days [0]. dLow
= 0; p>
poC.oStock.aoTradesLast130Days [0]. dClose
= 0; p>
Але в OP, Ви можете робити це набагато менш читається, що
роблячи так ... p>
with
poC.oStock.aoTradesLast130Days [0] do begin p>
lVol: = 0; p>
dHigh: = 0; p>
dLow: = 0; p>
dClose: = 0; p>
end; p>
В принципі в даний момент це виглядає досить
коротко і ясно по стравненію з С + +. Але у випадку численних вкладених
операторів часом виникає плутанина що з чим взаємодіє. Хоча ... як
кажуть програмісти, які пишуть на OP, їм набагато легше орієнтуватися
саме в такому типі записи (OP), ніж в типі З ++. p>
Коментарі
p>
C + + підтримує 2 види коментарів: p>
Однорядковий коментар p>
// Це коментар p>
І багаторядковий коментар p>
/* p>
А я багаторядковий коментар, хоча й перебуваю за все
на одному рядку. Зате зайняв місця на 3 рядки. P>
*/ p>
OP на відміну від С + + підтримує 3 види коментарів.
Це пов'язано з тим, що Borland при написанні Delphi вніс в мову Pascal дуже
багато елементів з C + +. В часности додався однорядковий коментар як в С + + p>
Однорядковий коментар p>
// Це коментар p>
І багаторядковий коментар p>
(* p>
А я багаторядковий коментар, хоча й перебуваю за все
на одному рядку. Зате зайняв місця на 3 рядки. P>
*) p>
( p>
І я багаторядковий коментар, але працюю тільки в OP p>
) p>
Керуючі конструкції (if, else,
switch ...)
p>
Існує п'ять структур управління на обох мовах, і
вони дуже подібні. Цей огляд займе багато місця. P>
1. Конструкція if ... else p>
C + + p>
if (<логічне вираження>)// в дужках
єдине вираження p>
( p>
... p>
) p>
else if (<логічне вираження>) p>
( p>
... p>
) p>
else p>
( p>
... p>
) p>
OP p>
if <логічний вираз> then p>
begin p>
(єдине вираження не повинна перебувати в
дужках) p>
... p>
end p>
else if <логічний вираз> then p>
begin p>
.... p>
end p>
else p>
begin p>
... p>
end; (тільки самий останній "end" у виразі термініруется
крапкою з комою) p>
2. Конструкція switch/case p>
C + + p>
switch (<цілочисельних константа>) p>
( p>
case iX: ... break; p>
case iY: ... break; p>
default: ... p>
) p>
OP p>
case <цілочисельних вираз мінлива або
константа> of p>
(тут "begin" не потрібен) p>
iX: p>
begin p>
... p>
end; (крапку з комою після кожного "end ";} p>
iY: p>
begin p>
... p>
end; p>
else (двокрапка не вимагається) p>
begin p>
... p>
end; p>
end; (ось тут "end;") p>
3. Цикл for p>
C + + p>
for (iCount = 0;
iCount <= 10; iCount ++) p>
( p>
// інкреметн потрібен для циклу, iCount + +, може бути
збільшений p>
// на будь-який значний не тільки на 1 p>
... p>
break;// для виходу з циклу p>
continue;// для продовження циклу p>
... p>
) p>
OP p>
for iCount: = 1 to
10 do p>
begin p>
... (цикл for може збільшувати лічильник тільки на 1) p>
break; (для виходу з циклу) p>
continue; (для продовження циклу) p>
... p>
end; p>
Є одна різниця між виконанням "break"
і "continue" в мовах. У C + +, break, і continue - ключові слова --
частина мови; p>
У OP це бібліотечні процедури.Хотя використовуються
також. p>
4. Цикл while p>
C + + p>
while (<логічне вираження>) p>
( p>
// вираз перевіряється на самому початку циклу, так що
код ніколи не може використовуватися p>
// якщо вираз поверне false p>
... p>
break;// для виходу з циклу p>
continue;// для продовження циклу p>
... p>
) p>
OP p>
while <логічний вираз> do p>
begin p>
(вираз перевіряється на самому початку циклу, так що
код ніколи не може використовуватися p>
якщо вираз
поверне false) p>
... p>
break; (для виходу з циклу) p>
continue; (для продовження циклу) p>
... p>
end; p>
5. Цикл do ... while p>
5) The do/repeat
... loop construct: p>
C + + p>
do p>
( p>
// виконуємо?? ться якийсь код, потім перевіряється вираз.
У цьому випадку код виконається хоча б один раз p>
... p>
break;// для виходу з циклу p>
continue;// для продовження циклу p>
... p>
) while (<логічне вираження >); p>
OP p>
repeat p>
(eвиполняется якийсь код, потім перевіряється вираз.
У цьому випадку код виконається хоча б один раз p>
зауважте що в
циклі немає ключових слів begin ... end) p>
... p>
break; (для виходу з циклу) p>
continue; (для продовження циклу) p>
... p>
until <логічне вираження>; p>
Список літератури h2>
Для підготовки даної роботи були використані
матеріали з сайту http://www.realcoding.net/
p>