int i = 5;
int j = 10;
i = j;
β’ Π’ΠΈΠΏΡ ΡΡΡΠ»ΠΎΠΊ. ΠΡΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΊΠ°ΠΊ Integer (Π² Java), String ΠΈ MyVeryOwnClass. ΠΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ, Π° Π΄Π»Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ clone() (Π² Java) ΠΈΠ»ΠΈ Clone() (Π² C#). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
Integer i = new Integer(5);
Integer j = new Integer(10);
i = j.clone();
Π Π‘++ Π²ΡΠ΅ ΡΠΈΠΏΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Β«ΡΠΈΠΏΡ ΡΡΡΠ»ΠΎΠΊΒ», Π° Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΡΠΎΠΌΡ ΡΠ΅ ΠΈΠ· Π½ΠΈΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Β«ΡΠΈΠΏΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉΒ». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π‘++ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΠΌΠ΅ΡΡ ΠΊΠ»Π°ΡΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Integer, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ new:
int *i = new int(5);
int *j = new int(10);
*i = *j;
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Java ΠΈ C#, Π² Π‘++ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠΈΠΏΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ:
Point2D *i = new Point2D(5, 5);
Point2D *j = new Point2D(10, 10);
*i = *j;
ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ»Π°ΡΡ Π‘++ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌΡΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄ΡΡΠ³ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π² Π‘++ ΡΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
Point2D i(20, 20);
Point2D j(i); // ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ±
Point2D k = i; // Π²ΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ:
Point2D i(5, 5);
Point2D j(10, 10);
j = i;
ΠΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π‘++ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅Π½Π° Π² ΡΠ»Π΅Π½. ΠΠ»Ρ ΠΊΠ»Π°ΡΡΠ° Point2D ΡΡΠΎ ΡΠ°Π²Π½ΠΎΡΠΈΠ»ΡΠ½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°:
01 class Point2D
02 {
03 public:
04 Point2D(const Point2D &other)
05 : xVal(other.xVal), yVal(other.yVal) { }
06 Point2D &operator=(const Point2D &other)
07 {
08 xVal = other.xVal;
09 yVal = other.yVal;
10 return *this;
11 }
12 β¦
13 private:
14 double xVal;
15 double yVal;
16 };
ΠΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π΅ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΊΠ»Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠ°ΠΌΡΡΡ. Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌΡΠΌ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ.
ΠΠ»Ρ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌΡΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡ Π·Π°ΠΊΡΡΡΡΠΌΠΈ. ΠΡΠ»ΠΈ ΠΌΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
class BankAccount
{
public:
β¦
private:
BankAccount(const BankAccount &other);
BankAccount &operator=(const BankAccount &other);
};
Π Qt ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΡΡΡΡΡ Π² ΡΡΠ΅ΠΊΠ΅ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new. ΠΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ QDateTime, QImage, QString ΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌβΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ QList<T>, QVector<T> ΠΈ QMap<K, T>.
ΠΡΡΠ³ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ Β«ΡΠΈΠΏΠ° ΡΡΡΠ»ΠΎΠΊΒ», Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ QObject ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΡ (QWidget, QTimer, QTcpSocket ΠΈ Ρ.Π΄.). ΠΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, QWidget ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π΄ΠΈΡΠΏΠ»Π΅Ρ. ΠΡΠ»ΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ 75 ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² QWidget, Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ 75 ΠΎΠΊΠΎΠ½ ΠΈΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΡΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new.
ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ
Π‘++ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΈΠ· Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡ Π²ΠΈΠ΄Π΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ main() β ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΡΠ΅ΠΆΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΠ»ΠΎΡ ΠΎ Π²Π»ΠΈΡΡΡ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠ΅Π΅Π½ΡΠ΅ΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΡ. ΠΡΠ΅ ΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ Π½ΠΈΡ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Π°ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ Ρ Π½ΠΈΠΌΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π½ΡΡΠ΅ ΠΏΠΈΡΠ°Π» Π½Π° Π‘, ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ Π‘++.
ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· 128 ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠΈΡΠ΅Π», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π½Π½ΡΠΉ Π½Π° ΡΠΊΠΎΡΡΡ ΡΡΠΊΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ. ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π΄Π²ΡΡ ΡΠ°ΠΉΠ»Π°Ρ .cpp.
ΠΠ΅ΡΠ²ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ» β random.cpp:
01 int randomNumbers[128];
02 static int seed = 42;
03 static int nextRandomNumber()
04 {
05 seed = 1009 + (seed * 2011);
06 return seed;
07 }
08 void populateRandomArray()
09 {
10 for (int i = 0; i < 128; ++i)
11 randomNumbers[i] = nextRandomNumber();
12 }
Π ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ Π΄Π²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ (randomNumbers ΠΈ seed) ΠΈ Π΄Π²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (nextRandomNumber() ΠΈ populateRandomArray()). Π Π΄Π²ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ static; ΡΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΈΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ (random.cpp), ΠΈ Π³ΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Ρ (static linkage). ΠΠ²Π° Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈΠ· Π»ΡΠ±ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΡΡ ΡΠ²ΡΠ·Ρ (external linkage).
Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π΄ΡΡΠ³ΠΈΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ½Π° ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΡΠΈΡΠΊ Β«ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡΒ» ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² (Π½Π°Π»ΠΈΡΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ»ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΠΎΠΉ Π² ΡΠ°Π·Π½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ) ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΎΠΏΡΠΎΠΌΠ΅ΡΡΠΈΠ²ΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΠΉΠ» main.cpp, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π² random.cpp Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΠ²ΡΠ·ΠΈ:
01 #include <iostream>
02 using namespace std;
03 extern int randomNumbers[128];
04 void populateRandomArray();
05 int main()
06 {
07 populateRandomArray();
08 for (int i = 0; i < 128; ++i)
09 cout << randomNumbers[i] << endl;
10 return 0;
11 }
ΠΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎ ΠΈΡ Π²ΡΠ·ΠΎΠ²Π°. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ randomNumbers Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ (ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΅Π΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ) Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° extern. ΠΡΠ»ΠΈ Π±Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΡΡΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Β«ΠΏΠΎΡΡΠΈΡΠ°Π»Β» Π±Ρ, ΡΡΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ Π΄Π΅Π»ΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ Β«ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Π»ΡΡΒ» Π±Ρ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π΄Π²ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ (random.cpp ΠΈ main.cpp). ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠΠΌΠ΅Π½Π½ΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΡΠ΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
Π€ΡΠ½ΠΊΡΠΈΡ populateRandomArray() ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ°. Π£ΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ extern Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠ±ΡΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π΅Π³ΠΎ Π²ΠΎ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΡΡΠ΅Π±ΡΡΡΡΡ:
01 #ifndef RANDOM_H
02 #define RANDOM_H
03 extern int randomNumbers[128];
04 void populateRandomArray();
05 #endif
ΠΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ static ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ βΡΠ»Π΅Π½ΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉβΡΠ»Π΅Π½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠ°, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΡΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° static, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ. Π Π‘++ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΊΠ°ΠΊ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
01 void nextPrime()
02 {
03 static int n = 1;
04 do {
05 ++n;
06 } while (!isPrime(n));
07 return n;
08 }
Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ Π²ΠΈΠ΄ΠΈΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ.
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΠΈΡΠΊ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° ΠΈΠΌΠ΅Π½ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π‘++. ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΠΈΠΌΠ΅Π½ ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². Π ΡΠ²ΠΎΠ΅ΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π²Ρ ΡΠ΅ΡΠ°Π΅ΡΠ΅ ΡΠ°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈ Π²Π°ΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½.