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

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

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

Ѐункция main() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘++ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ strtod() (Β«string to doubleΒ» β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности), cout (стандартный ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° Π‘++) ΠΈ cerr (стандартный ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π‘++) для прСобразования Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π² Ρ‚ΠΈΠΏ double ΠΈ для Π²Ρ‹Π²ΠΎΠ΄Π° тСкста Π½Π° консоль. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, числа ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΊΠΎΠ½Ρ†Π° строки (endl) выводятся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° <<, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сдвига Π±ΠΈΡ‚ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #include, располоТСнныС Π² строках 1 ΠΈ 2.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° using namespace Π² строкС 3 ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ компилятору Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² глобальноС пространство ΠΈΠΌΠ΅Π½ всС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² пространствС ΠΈΠΌΠ΅Π½ std. Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ записью strtod(), cout, cerr ΠΈ endl вмСсто указания ΠΏΠΎΠ»Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½: std::strtod(), std::cout, std::cerr ΠΈ std::endl. Π’ Π‘++ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ :: раздСляСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ слоТного ΠΈΠΌΠ΅Π½ΠΈ.

Π’ строкС 4 ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Он ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ компилятору Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сущСствуСт функция с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. РСальноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΈΠ»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ компиляции. Π‘Π΅Π· ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ компилятор Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π±Ρ‹ Π½Π°ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² строкС 12. ИмСна ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. НапримСр, для компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Solaris с использованиСм компилятора Π‘++ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«SunΒ» ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

CC -с main.cpp

CC -с square.cpp

ld main.o square.o -ΠΎ square

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ строки Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ компилятор, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ .ΠΎ для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² .cpp. Π’Ρ€Π΅Ρ‚ΡŒΡ строка Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ square, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

./square 64

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° консоль ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС:

The square of 64 is 4096

(ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ числа 64 Ρ€Π°Π²Π΅Π½ 4096)

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, попроситС ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρƒ мСстного ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ³ΠΎ программиста Π‘++. Если это Π½Π΅ удастся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ компилируя, ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструкциями Π² Π³Π»Π°Π²Π΅ 1 ΠΏΠΎ компиляции вашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ прилоТСния C++/Qt. Π’ Qt прСдусмотрСны ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ прилоТСния Π½Π° любой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅.

ВСрнСмся ΠΊ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΌΡ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π»ΠΈ Π±Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ square() Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈ Π±Ρ‹ этот Ρ„Π°ΠΉΠ» Π²ΠΎ всС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ компиляции, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… вызываСтся эта функция. Π’Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» называСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌ; ΠΎΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .h (часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ .hh, .hpp ΠΈ .hxx). Если ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ square.h, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

1 #ifndef SQUARE_H

2 #define SQUARE_H

3 double square(double);

4 #endif

Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π·Π°Π΄Π°ΡŽΡ‚ΡΡ прСпроцСссорныС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ (#ifndef, #define ΠΈ #endif). Π­Ρ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ нСсколько Ρ€Π°Π· Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ компиляции (такая ситуация Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹). По принятым соглашСниям ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для этого прСпроцСссорный символ строится Π½Π° основС ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° (Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это символ SQUARE_H). ПозТС Π² этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ вСрнСмся ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ прСпроцСссора.

Новый Ρ„Π°ΠΉΠ» main.cpp Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

01 #include <cstdlib>

02 #include <iostream>

03 #include "square.h"

04 using namespace std;

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

06 {

07 if (argc != 2) {

08 cerr << "Usage: square <number>" << endl;

09 return 1;

10 }

11 double n = strtod(argv[1], 0);

12 cout << "The square of " << argv[1] << " is " << square(n) << endl;

13 return 0;

14 }

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² строкС 3 Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ содСрТимоС Ρ„Π°ΠΉΠ»Π° square.h. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с символа #, Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ прСпроцСссором Π‘++ Π΄ΠΎ фактичСской компиляции. Π’ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠ΅ Π΄Π½ΠΈ прСпроцСссор являлся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ программист Π²Ρ‹Π·Ρ‹Π²Π°Π» Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ компилятора. Π’ соврСмСнных компиляторах этап прСпроцСссорной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ выполняСтся автоматичСски.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #include Π² строках 1 ΠΈ 2 Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ содСрТимоС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² cstdlib ΠΈ iostream, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘++. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ суффикса .h. Π£Π³Π»ΠΎΠ²Ρ‹Π΅ скобки Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² говорят ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² стандартном мСстС систСмы, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ компилятор ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #include ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ вмСстС ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части Ρ„Π°ΠΉΠ»Π° .cpp.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ² .cpp, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ сами ΠΏΠΎ сСбС Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ компиляции ΠΈ Π½Π΅ приводят ΠΊ созданию ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Они ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ объявлСния, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌ компиляции Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ square() Π² ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Если Π±Ρ‹ ΠΌΡ‹ это сдСлали Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ Π½Π΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π±Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ square.h Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ Ссли Π±Ρ‹ ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈ square.h Π² нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² .cpp, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π±Ρ‹ нСсколько Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ square() (ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» .cpp, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ этот Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»). ПослС этого ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ поТаловался Π±Ρ‹ Π½Π° сущСствованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ…) ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ square() ΠΈ отказался Π±Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ссли ΠΌΡ‹ объявляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π½ΠΈΠ³Π΄Π΅ Π΅Π΅ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ поТалуСтся Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Β«Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ символа».

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. БущСствуСт Π΄Π²Π° основных Ρ‚ΠΈΠΏΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ:

β€’ статичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ нСпосрСдствСнно ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ исполняСмого модуля;

β€’ динамичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ DLL) Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² стандартном мСстС Π½Π° машинС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ автоматичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π²ΠΎ врСмя запуска прилоТСния.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ square ΠΌΡ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΠ΅ΠΌ со стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π‘++, которая Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ динамичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. Π‘Π°ΠΌΠΈ срСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Qt ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ статичСскиС ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ динамичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ динамичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ отличия языков

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ рассмотрим области, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π‘++ отличаСтся ΠΎΡ‚ Java ΠΈ C#. МногиС языковыС различия ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ особСнностями скомпилированных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π‘++ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’Π°ΠΊ, Π‘++ Π½Π΅ провСряСт Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массивов Π½Π° этапС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π½Π΅ сущСствуСт сборщика мусора, Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ, динамичСски Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Для краткости Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅ конструкции Π‘++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ конструкциям Java ΠΈ C#. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, здСсь Π½Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ Π‘++, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Qt. К Π½ΠΈΠΌ относятся ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ классы ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ объСдинСний ΠΈ использованиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ПолноС описаниС языка ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ½ΠΈΠ³Π°Ρ…, ΠΊΠ°ΠΊ Β«The Π‘++ Programming LanguageΒ» (Π―Π·Ρ‹ΠΊ программирования Π‘++) , написанной Π‘ΡŒΠ΅Ρ€Π½ΠΎΠΌ Бтрауструпом, ΠΈΠ»ΠΈ Β«Π‘++ for Java ProgrammersΒ» (Π‘++ для программистов Java), написанной ΠœΠ°Ρ€ΠΊΠΎΠΌ АлСном Уайссом (Mark Allen Weiss).

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ Π² Π‘++ элСмСнтарныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Java ΠΈΠ»ΠΈ C#. На рис. Π‘.2 приводятся список элСмСнтарных Ρ‚ΠΈΠΏΠΎΠ² Π‘++ ΠΈ ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Qt 4:

β€’ bool β€” Π±ΡƒΠ»Π΅Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅,

β€’ char β€” 8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ†Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ,

β€’ short β€” 16-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ†Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ,

β€’ int β€” 32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ†Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ,

β€’ long β€” 32- ΠΈΠ»ΠΈ 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ†Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ,

β€’ long long[9] β€” 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ†Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ,