Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 118

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² строки Π‘++, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ ΠΈΡ… ΠΊΠ°ΠΊ char * ΠΈΠ»ΠΈ const char *. НиТС приводится короткая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

01 #include <cctype>

02 #include <iostream>

03 using namespace std;

04 void makeUppercase(char *str)

05 {

06 for (int i = 0; str[i] != '\0'; ++i)

07 str[i] = toupper(str[i]);

08 }

09 void writeLine(const char *str)

10 {

11 cout << str << endl;

12 }

13 int main(int argc, char *argv[])

14 {

15 for (int i = 1; i < argc; ++i) {

16 makeUppercase(argv[i]);

17 writeLine(argv[i]);

18 }

19 return 0;

20 }

Π’ Π‘++ Ρ‚ΠΈΠΏ char ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 8 Π±ΠΈΡ‚. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² массивС символов char Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ строки Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ ASCII, ISO 8859-1 (Latin-1) ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… 8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ…, Π½ΠΎ нСльзя Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ символы Unicode, Ссли Π½Π΅ ΠΏΡ€ΠΈΠ±Π΅Π³Π°Ρ‚ΡŒ ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌ. Qt прСдоставляСт ΠΌΠΎΡ‰Π½Ρ‹ΠΉ класс QString, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ строки Unicode Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ 16-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… символов QChar ΠΈ ΠΏΡ€ΠΈ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ нСявного совмСщСния Π΄Π°Π½Π½Ρ‹Ρ… (Β«ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ записи»). Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ строки QString Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 11 (Β«ΠšΠ»Π°ΡΡΡ‹β€”ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹Β») ΠΈ Π² Π³Π»Π°Π²Π΅ 17 (Β«Π˜Π½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡΒ»).

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ

Π‘++ позволяСт с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пСрСчислСния ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… констант Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ это дСлаСтся Π² C#. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ трСбуСтся Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ названия Π΄Π½Π΅ΠΉ Π½Π΅Π΄Π΅Π»ΠΈ:

enum DayOfWeek {

Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday

};

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это объявлСниС располагаСтся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ объявлСниС Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд прСдставляСтся эквивалСнтным ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ опрСдСлСниям констант:

const int Sunday = 0;

const int Monday = 1;

const int Tuesday = 2;

const int Wednesday = 3;

const int Thursday = 4;

const int Friday = 5;

const int Saturday = 6;

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ пСрСчислСния, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° DayOfWeek, ΠΈ компилятор Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ присваивания ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ пСрСчислСния DayOfWeek. НапримСр:

DayOfWeek day = Sunday;

Если нас ΠΌΠ°Π»ΠΎ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚ обСспСчСниС защищСнности Ρ‚ΠΈΠΏΠΎΠ², ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

int day = Sunday;

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ссылкС Π½Π° константу Sunday ΠΈΠ· пСрСчислСния DayOfWeek ΠΌΡ‹ пишСм просто Sunday, Π° Π½Π΅ DayOfWeek::Sunday.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ компилятор Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ цСлочислСнныС значСния константам пСрСчислСния, начиная с нуля. ΠŸΡ€ΠΈ нСобходимости ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния:

enum DayOfWeek {

Sunday = 628,

Monday = 616,

Tuesday = 735,

Wednesday = 932,

Thursday = 852,

Friday = 607,

Saturday = 845

};

Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ задаСтся для элСмСнта пСрСчислСния, этот элСмСнт ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ элСмСнта, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° 1. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для объявлСния цСлочислСнных констант, ΠΈ Π² этих случаях ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ имя Π½Π΅ Π·Π°Π΄Π°ΡŽΡ‚:

enum {

FirstPort = 1024, MaxPorts = 32767

};

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ примСнСния пСрСчислСний являСтся прСдставлСниС Π½Π°Π±ΠΎΡ€Π° ΠΎΠΏΡ†ΠΈΠΉ. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Find (поиск) с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ поиска (ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ шаблона поиска, ΡƒΡ‡Π΅Ρ‚ рСгистра, поиск Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ поиска с Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°). Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ пСрСчислСния, значСния констант ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π²Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни 2:

enum FindOption {

NoOptions = 0x00000000,

WildcardSyntax = 0x00000001,

CaseSensitive = 0x00000002,

SearchBackward = 0x00000004,

WrapAround = 0x00000008

};

КаТдая опция часто называСтся Β«Ρ„Π»Π°ΠΆΠΊΠΎΠΌΒ». Π€Π»Π°ΠΆΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ логичСских поразрядных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² | ΠΈΠ»ΠΈ |=:

int options = NoOptions;

if (wilcardSyntaxCheckBox->isChecked())

options |= WildcardSyntax;

if (caseSensitiveCheckBox->isChecked())

options |= CaseSensitive;

if (searchBackwardCheckBox->isChecked())

options |= SearchBackwardSyntax;

if (wrapAroundCheckBox->isChecked())

options |= WrapAround;

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°ΠΆΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ логичСского поразрядного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° &:

if (options & CaseSensitive) {

// поиск с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ рСгистра

}

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° FindOption ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ„Π»Π°ΠΆΠΎΠΊ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ объСдинСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π»Π°ΠΆΠΊΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° | прСдставляСт собой ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число. К соТалСнию, здСсь Π½Π΅ обСспСчиваСтся Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ°: компилятор Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Β«ΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒΡΡΒ», Ссли функция, которая Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ° int Π½Π΅ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΎΠΏΡ†ΠΈΠΉ FindOption, фактичСски ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Saturday. Qt ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ класс QFlags<T> для обСспСчСния защищСнности своих собствСнных Ρ‚ΠΈΠΏΠΎΠ² Ρ„Π»Π°ΠΆΠΊΠΎΠ². Π­Ρ‚ΠΎΡ‚ класс ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Ρ„Π»Π°ΠΆΠΊΠΎΠ². ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС класса QFlags<T> ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΎΠ½Π»Π°ΠΉΠ½ΠΎΠ²ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

ИмСна, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ typedef

Π‘++ позволяСт с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова typedef Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ псСвдонимы Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Ссли часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΈΠΏ QVector<Point2D> ΠΈ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° Π²Π²ΠΎΠ΄Π΅ символов (ΠΈΠ»ΠΈ, ΠΊ Π½Π΅ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, приходится ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с норвСТской ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ ΠΈ Π²Π°ΠΌ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° Π½Π΅ΠΉ ΡƒΠ³Π»ΠΎΠ²Ρ‹Π΅ скобки), Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π²Π°ΡˆΠΈΡ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ объявлСниС typedef:

typedef QVector<Point2D> PointVector;

ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя PointVector ΠΊΠ°ΠΊ сокращСниС для QVector<Point2D>. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ имя указываСтся послС старого. Бинтаксис typedef ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ синтаксис объявлСний ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π’ Qt ΠΈΠΌΠ΅Π½Π°, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ typedef, Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

β€’ Удобство: Qt ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ typedef ΠΈΠΌΠ΅Π½Π° uint ΠΈ QWidgetList для unsigned int ΠΈ QList<QWidget *>, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ нСсколько символов.

β€’ Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ: ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. НапримСр, qlonglong опрСдСляСтся ΠΊΠ°ΠΊ __int64 Π² Windows ΠΈ ΠΊΠ°ΠΊ long long Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ….

β€’ Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ: класс QIconSet ΠΈΠ· Qt 3 Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ Π² QIcon для Qt 4. Для облСгчСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Qt 3 ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Qt 4 класс QIconSet ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ typedef QIcon, ΠΊΠΎΠ³Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ€Π΅ΠΆΠΈΠΌ совмСстимости с Qt 3.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²

Π‘++ прСдставляСт нСсколько синтаксичСских конструкций ΠΏΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π² скобки ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ β€” это Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ способ, унаслСдованный ΠΎΡ‚ Π‘:

const double Pi = 3.14159265359;

int x = (int) (Pi * 100);

cout << x << " equals 314" << endl;

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ мощная конструкция. Она ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для измСнСния Ρ‚ΠΈΠΏΠ° указатСля, устранСния константности ΠΈ для ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. НапримСр:

short j = 0x1234;

if (*(char *) &j == 0x12)

cout << "The byte order is big-endian" << endl;

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ Ρ‚ΠΈΠΏ short * ΠΊ Ρ‚ΠΈΠΏΡƒ char * ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ * для обращСния ΠΊ Π±Π°ΠΉΡ‚Ρƒ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ адрСсу памяти. Π’ систСмах с прямым порядком Π±Π°ΠΉΡ‚ΠΎΠ² этот Π±Π°ΠΉΡ‚ содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0x12; Π² систСмах с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ порядком Π±Π°ΠΉΡ‚ΠΎΠ² ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0x34. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ссылки ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Π½Π΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ прСдставлСнный Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° ссылки:

short j = 0x1234;

if ((char &) j == 0x12)

cout << "The byte order is big-endian" << endl;

Если Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ класса, ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ typedef, ΠΈΠ»ΠΈ элСмСнтарным Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСн ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎβ€”Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ лСксСмой, для привСдСния Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис конструктора:

int x = int(Pi * 100);

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ссылок с использованиСм Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² стилС языка Π‘ являСтся Π½Π΅ΠΊΠΈΠΌ ΡΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ спорта, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠ°Ρ€Π°Π³Π»Π°ΠΉΠ΄ΠΈΠ½Π³ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ°Π±ΠΈΠ½Π΅ Π»ΠΈΡ„Ρ‚Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ компилятор позволяСт ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (ΠΈΠ»ΠΈ ссылку) любого Ρ‚ΠΈΠΏΠ° Π² любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ указатСля (ΠΈΠ»ΠΈ ссылки). По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π² Π‘++ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ конструкции привСдСния Ρ‚ΠΈΠΏΠΎΠ² с Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ сСмантикой. Для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ссылок Π½ΠΎΠ²Ρ‹Π΅ конструкции привСдСния Ρ‚ΠΈΠΏΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с рискованными конструкциями Π² стилС Π‘, ΠΈ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅.