Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠ»Π°ΡΡΡ
ΠΡΠΎΡΠΎΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ½ ΠΆΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ°ΡΡΠ΅ΠΉ
[ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ] [ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ] ([Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ]);
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΈ - ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΎ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ(ΡΠ΅Π»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ). ΠΠ±ΡΡΠ½ΠΎ Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΠ»ΠΈ Π² Π½Π°ΡΠ°Π»Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² Π½Π΅ΠΌ.
ΠΡΠΈΠΌΠ΅Ρ:
int foo(float a, float b);
int
ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
foo
ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ
a
ΠΈ b
- Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ void. ΠΡΠΎΡΠΎΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ΠΌ ΡΠ΅Π»Π°.
#include <iostream>
int sum(int a, int b); // ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅
int main() {
std::cout << sum(4,5) << std::endl;
return 0;
}
int sum(int a, int b) { // ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
int result = 0;
result = a + b;
return result;
}
3. ΠΠ»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡΡ
ΠΠ»Π°ΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ»Π°ΡΡ auto
,
ΡΠΎ Π΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π° Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½Π°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ,
ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ - Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ Π½Π΅ Π½Π°Π΄ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, Π²ΡΠ΅
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ. ΠΠ°ΠΆΠ½ΠΎ Π½Π΅ ΠΏΡΡΠ°ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° ΠΏΠ°ΠΌΡΡΠΈ auto
ΠΈ
ΡΠΈΠΏΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ auto
!
extern
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²Π½Π΅ΡΠ½ΡΡ, ΡΠΎ Π΅ΡΡΡ Π΅Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅.
static
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠ³ΡΠ±ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ, Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΡΠ°ΠΉΠ»Π°. ΠΠ°ΠΆΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ,
ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° static
Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ½Π° ΠΏΡΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
#include <iostream>
int inc() {
static int x = 0;
x++;
return x;
}
int main() {
std::cout << inc();
std::cout << inc();
std::cout << inc();
return 0;
}
ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ²Π΅Π΄Π΅Ρ 1,2,3;
#include <iostream>
int inc() {
int x = 0;
x++;
return x;
}
int main() {
std::cout << inc() << ",";
std::cout << inc() << ",";
std::cout << inc();
return 0;
}
Π° Π΅ΡΠ»ΠΈ ΡΠ±ΡΠ°ΡΡ ΡΠ»ΠΎΠ²ΠΎ static Π½Π° ΡΠΊΡΠ°Π½ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ 1,1,1
register
ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΠΊΠ»Π°ΡΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΡΠΎ ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ
ΡΠ΅Π³ΠΈΡΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Ρ.ΠΊ. Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ
Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΌΠ½Ρ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
Π―Π²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΎΠΉ ΠΈ Π½ΠΈ ΠΊ ΡΠ΅ΠΌΡ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΎΠ±ΡΠ·ΡΠ²Π°Π΅Ρ.
thread_local
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΠΎΡΠΎΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½Π°, ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡΡΡ Ρ static
ΠΈ extern
Π’ΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ . ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΡΠΊΡΡΡΠ°, ΠΊΠ»Π°ΡΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅. Π’ΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π΅Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ.
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (by value) ΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ (by reference). ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΡ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. Π ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠ°ΠΌΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
#include <iostream>
int inc(int x) {
x++;
return x;
}
int main() {
int x = 0;
std::cout << inc(x) << ",";
std::cout << x;
return 0;
}
ΠΡΠ²Π΅Π΄Π΅Ρ 1,0, Ρ.ΠΊ. Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΡΠ»Π° ΠΏΠ΅Π΄Π΅ΡΠ°Π½Π° ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° ΠΊΠΎΠΏΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° Π½Π΅ ΡΠ°ΠΌΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ. Π‘ΡΠΎΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π» ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
#include <iostream>
int inc(int &x) {
x++;
return x;
}
int main() {
int x = 0;
std::cout << inc(x) << ",";
std::cout << x;
return 0;
}
ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π²ΡΠ²Π΅Π΄Π΅Ρ 1,1, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΡΠΈΠΈ ΠΌΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ Π½Π΅ Ρ ΠΊΠΎΠΏΠΈΠ΅ΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ Π½Π΅ΠΉ ΡΠ°ΠΌΠΎΠΉ. ΠΠ°ΠΆΠ½ΡΠΉ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΌΡΡΠ» Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΠΈΠΏ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΡΠΉ - Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ ΡΡΡΡΠΊΡΡΡΠ° - ΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ Π΅Π΅ ΠΊΠΎΠΏΠΈΡ, Π° ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠΌΠΈ ΡΠ°ΡΡ ΠΎΠ΄Π°ΠΌΠΈ.
ΠΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ const
ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΡΡΠ½ΠΊΡΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ
Π½Π΅Π»ΡΠ·Ρ.
int inc(const int x) {
x++;
return x;
}
ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ error: increment of read-only parameter βxβ
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π³ΡΡΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ², ΡΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π² ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π΄Π΅Π»Π°Π΅Ρ Π·Π° Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ Π½Π°ΠΌ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π°Π΄ΡΠ΅Ρ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΠΈΡΠΈ :
int sum(int x[], int len) {
int sum = 0;
for(int i = 0;i<len;i++) {
sum += x[i];
}
return sum;
}
ΠΈ
int sum(int *x, int len) {
int sum = 0;
for(int i = 0;i<len;i++) {
sum += x[i];
}
return sum;
}
ΡΠ°Π²Π½ΠΎΠ·Π½Π°ΡΠ½Ρ.
Π Π½Π΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΠΏΡΠΎ ΡΠ»ΠΎΠ²ΠΎ const
:
int sum(const int x[], const int len) {
int sum = 0;
for(int i = 0;i<len;i++) {
sum += x[i];
x[i] += sum;
}
return sum;
}
Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π Π‘++ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π³ΡΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π½Π° ΠΈΡ ΠΌΠ΅ΡΡΠΎ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
#include <iostream>
int sum(int x[], int len = 4) {
int sum = 0;
for(int i = 0;i<len;i++) {
sum += x[i];
}
return sum;
}
int main() {
int x[] = {1,2,3,4};
std::cout << sum(x) << std::endl;
return 0;
}
ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° len, Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 4. Π‘ΡΠΎΠΈΡ Π»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΎΡ 4, ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΠΎΡΡΠΎΠΌΡ ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΡΡ. ΠΠΎΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
#include <iostream>
int sum(const int x[], int len, bool print = false) {
int sum = 0;
for(int i = 0;i<len;i++) {
sum += x[i];
}
if(print) {
std::cout << sum << std::endl;
}
return sum;
}
int main() {
int x[] = {1,2,3,4};
sum(x, 4);
sum(x, 4, true);
return 0;
}
ΠΡΠ»ΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΊΠ°Π·Π°Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
#include <iostream>
int sum(const int x[], bool print = false, int len) {
int sum = 0;
for(int i = 0;i<len;i++) {
sum += x[i];
}
if(print) {
std::cout << sum << std::endl;
}
return sum;
}
int main() {
int x[] = {1,2,3,4};
sum(x, 4);
return 0;
}
Π’Π°ΠΊΠ°Ρ Π·Π°ΠΏΠΈΡΡ ΡΠΆΠ΅ Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°, ΠΎ ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΎΠΎΠ±ΡΠΈΡ.
ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ ΡΠ°Π·Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊΠ°ΠΊ ΠΊ ΡΠΈΠΏΠ°ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠ°ΠΊ ΠΈ ΠΊ ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΠΌ Π²ΡΠ±Π΅ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π½Π°Π΄ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΠΏΠΎΠ² Π΅Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
#include <iostream>
int add(int a, int b) {
return a+b;
}
double add(double a, double b) {
return a+b;
}
int main() {
int x = 3, y = 5;
int z = add(x,y);
std::cout << z << std::endl;
double alpha = 7.0, beta = 11.0;
double delta = add(alpha, beta);
std::cout << delta << std::endl;
return 0;
}
Π‘ΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π²ΡΠ±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΡ ΠΊΠΎΠ΄, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
#include <iostream>
int add(int a, int b) {
return a+b;
}
double add(int a, int b) {
return a+b;
}
int main() {
int x = 3, y = 5;
int z = add(x,y);
std::cout << z << std::endl;
return 0;
}
Π‘ΡΡΡΠΊΡΡΡΡ ΠΈ ΠΊΠ»Π°ΡΡΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΠΈΠΏΠΎΠ². ΠΠ»Π°ΡΡΡ ΠΈ ΡΡΡΡΠΊΡΡΡΡ ΠΌΠΎΠ³ΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅-ΡΠ»Π΅Π½Ρ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
Π C++ ΠΊΠ»Π°ΡΡΡ ΠΈ ΡΡΡΡΠΊΡΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠ°, ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΡΠΊΡΡΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ°, Π° ΠΊΠ»Π°ΡΡΡ β Π·Π°ΠΊΡΡΡΡ.
ΠΠ±ΡΡΠ²ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΡ AStruct ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π½Π΅ΠΉ:
#include <iostream>
struct AStruct {
AStruct() { x = 0; y = 0; }
int x;
int y;
};
int main() {
AStruct a;
a.x = 4;
a.y = 5;
std::cout << a.x << "," << a.y << std::endl;
return 0;
}
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Ρ ΡΡΡΡΠΊΡΡΡΡ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈ Π΄Π²Π° ΡΠ»Π΅Π½Π° x
ΠΈ y
. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π½ΠΈΠΌ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ,
ΡΡΠΎΠΈΡ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ struct
Π½Π° class
:
#include <iostream>
class AStruct {
AStruct() { x = 0; y = 0; }
int x;
int y;
};
int main() {
AStruct a;
a.x = 4;
a.y = 5;
std::cout << a.x << "," << a.y << std::endl;
return 0;
}
Π ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΆΠ΅ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΎ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠΎΠ»Ρ ΡΠΈΠΏΠ° private
. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° public
ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
class AStruct {
public:
AStruct() { x = 0; y = 0; }
int x;
int y;
};
ΠΠ»Π°ΡΡΡ ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²ΠΎΠ΄ΠΈΡΡ
ΡΠ²ΠΎΠΈ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌΠΈ(ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ). ΠΡΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°,
ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΡΠΎΡ. ΠΏΡΠΎΡ. Π‘ΠΌΡΡΠ» ΠΊΠ»Π°ΡΡΠΎΠ² Π² ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΈΡ
ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΡ
Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
ΠΠ°ΠΆΠ½Π΅ΠΉΡΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡ
Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡ β ΡΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²) ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
Π½Π°Π΄ Π½ΠΈΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΏΠΈΡΠ΅ΠΌ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ° Point
ΠΈ Vector
.
#include <iostream>
#include <cmath>
class Point {
protected:
int x;
int y;
private:
void _reset() {
x = 0;
y = 0;
}
public:
void Move(int newX, int newY) {
if(newX >= 0 && newY >= 0) {
x = newX;
y = newY;
}
}
Point() {
_reset();
}
};
class Vector : public Point {
public:
double Length() {
return sqrt(x*x+y*y);
}
Vector() {
std::cout << "Vector created" << std::endl;
}
~Vector() {
std::cout << "Vector destroyed" << std::endl;
}
};
int main() {
Vector v;
v.Move(1,1);
std::cout << v.Length() << std::endl;
return 0;
}
Π£ ΠΊΠ»Π°ΡΡΠ° Point
Π΅ΡΡΡ Π΄Π²Π° ΠΏΠΎΠ»Ρ x
ΠΈ y
, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΠ°ΠΆΠ°ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠΊΠΈ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅. ΠΠ΅ΡΠΎΠ΄ _reset()
ΡΡΡΠ°Π½Π°Π»Π²ΠΈΠ²Π°Π΅Ρ
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ, ΠΌΠ΅ΡΠΎΠ΄ Move()
, ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠΊΠΈ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅.
ΠΠ΅ΡΠΎΠ΄ _reset()
ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ, Ρ.ΠΊ. Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ private
. ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΌΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ
ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ
ΠΊΠ»Π°ΡΡΠΎΠ², Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΡΡΠΎ ΡΠΈΡΡΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄.
ΠΠ΅ΡΠΎΠ΄ Move()
Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π² ΠΎΠ±Π»Π°ΡΡΠΈ public
, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ½Π°ΡΡΠΆΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ
ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡ ΠΊ Π½Π΅ΠΌΡ ΠΈΠ· Π»ΡΠ±ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ x
ΠΈ y
ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ protected
. ΠΠ½ Π·Π°ΡΠΈΡΡΠ½Π½ΡΠΉ, Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΠ»Π΅Π½ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ²) β ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ»Π΅Π½Ρ
Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠΎΡ ΡΠ»Π΅Π½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ· Π»ΡΠ±ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠΎΠ²-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ².
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: private
ΠΏΠΎΠ»Ρ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ· Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ²!
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΈΠΏΡ protected Π΄Π΅Π»Π°Π΅Ρ Π²ΡΠ΅ public-ΡΠ»Π΅Π½Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° protected-ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°;
ΠΠ»Π°ΡΡ Vector
, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ½ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ Point
ΠΏΠΎΠ½ΡΡΠΈΡ
ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Move()
. ΠΠ΄Π½Π°ΠΊΠΎ, Ρ Π²Π΅ΠΊΡΠΎΡΠ° Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ, ΠΊΠΎΡΠΎΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Lenght()
.
ΠΠ»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² Π΅ΡΡΡ Π΄Π²Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄Π°: ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ - Vector()
ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ~Vector()
.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ(ΠΎΠ± ΡΡΠΎΠΌ Π½ΠΈΠΆΠ΅).
ΠΠ΅ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠΎΠ½ΡΡΠΈΠ΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌΠΈ. ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ»ΠΈΡΡΠ΅Ρ ΠΈΡ Π² Π½Π΅ΠΊΠΎΠΉ ΠΊΠ°ΠΏΡΡΠ»Π΅, ΠΎΡΡΡΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.
ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅, Ρ
ΡΠ°Π½ΡΡΠΈΠ΅ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΎΡ ΠΏΡΡΠΌΡΡ
Π²Π½Π΅ΡΠ½ΠΈΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ
ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅ ΠΌΡ ΡΠ±ΠΈΡΠ°Π΅ΠΌ x
ΠΈ y
Π² ΠΎΠ±Π»Π°ΡΡΡ private
, ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π²Π΅Π΄ΠΎΠΌΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ°,
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Move()
, Π Π½Π΅ΠΌ ΡΡΠ»ΠΎΠ²Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ if
, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°Π΄Π°ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 0, Π΅ΡΠ»ΠΈ Π±Ρ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠ΄
ΠΈΠΌΠ΅Π» Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠΌ x
ΠΈ y
, ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΡΠΎ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠ΄, ΠΎΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ
ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ(Π΅ΡΠ»ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ "Π΄ΠΎΠ±ΡΡΠΌ ΠΈ ΠΏΡΡΠΈΡΡΡΠΌ" ΠΈ Ρ Π½Π΅Π³ΠΎ Π½Π΅Ρ ΡΠ΅Π»ΠΈ Π½Π°ΠΌ Π²ΡΠ΅ ΠΏΠΎΠ»ΠΎΠΌΠ°ΡΡ).
Π’Π°ΠΊ ΠΆΠ΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΌΠ΅ΡΡΠΎ:
#include <iostream>
#include <cmath>
class Point {
protected:
int x;
int y;
public:
void Move(int newX, int newY) {
x = newX;
y = newY;
}
Point() {
x = 0;
y = 0;
}
};
class Vector : public Point {
public:
double Length() {
return sqrt(x*x+y*y);
}
Vector() {
std::cout << "Vector created" << std::endl;
}
~Vector() {
std::cout << "Vector destroyed" << std::endl;
}
};
int main() {
Vector v;
int X = 1, Y = 1;
if(X >= 0 && Y >= 0) {
v.Move(X, Y);
}
std::cout << v.Length() << std::endl;
X = 17; Y = 12;
if(X >= 0 && Y >= 0) {
v.Move(X, Y);
}
std::cout << v.Length() << std::endl;
return 0;
}
Π’ΠΎ Π΅ΡΡΡ, Π²ΠΎΠ·Π»ΠΎΠΆΠΈΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π° Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠ΄, ΠΌΡ Π²ΡΠ½ΡΠ΄ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΠ΅ΡΠ΅Π΄ Move()
ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ Π½ΠΎΠ²ΡΡ
ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ. ΠΠΎΠ΄ Π½ΠΈΠΆΠ΅ - ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½Π΅Π΅:
#include <iostream>
#include <cmath>
class Point {
protected:
int x;
int y;
public:
void Move(int newX, int newY) {
if (newX >= 0 && newY >= 0) {
x = newX;
y = newY;
}
}
Point() {
x = 0;
y = 0;
}
};
class Vector : public Point {
public:
double Length() {
return sqrt(x*x+y*y);
}
Vector() {
std::cout << "Vector created" << std::endl;
}
~Vector() {
std::cout << "Vector destroyed" << std::endl;
}
};
int main() {
Vector v;
int X = 1, Y = 1;
v.Move(X, Y);
std::cout << v.Length() << std::endl;
X = 17; Y = 12;
v.Move(X, Y);
std::cout << v.Length() << std::endl;
return 0;
}
Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² Π½Π°ΡΠ΅ΠΌ Π²ΠΈΡΡΠ°ΡΠ»ΡΠ½ΠΎΠΌ ΠΌΠΈΡΠ΅ ΡΠΎΡΠ΅ΠΊ ΠΈ Π²Π΅ΠΊΡΠΎΡΠΎΠ² Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΡΡΠ°Π½ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ ΠΊΠΎΠΎΡΠΈΠ΄ΠΈΠ½Π°ΡΡ ΠΌΠ΅Π½ΡΡΠΈΠ΅ 0, ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ±ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ - Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Move()
, Π° Π½Π΅
Π² Π΄Π²ΡΡ
(ΡΡΡΡΡΠ°Ρ
;)) ΠΌΠ΅ΡΡ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ ΠΊΠΎΠ΄Π΅.
12. ΠΠ±ΡΠ΅ΠΊΡΡ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½ΠΈΠΌ
ΠΠ±ΡΠ΅ΠΊΡ ΡΡΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ°. Π’ΠΎ Π΅ΡΡΡ ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠΌΠ΅ΡΡΠ°Ρ ΡΠΈΠΏ, ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠΈΠΉ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ
ΠΈ Π²Π΅ΠΊΡΠΎΡΠ°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ v
ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Vector
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅
ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°Π½Π½Ρ Π² ΠΊΠ»Π°ΡΡ Vector
. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Vector v;
, Π½ΠΎ ΡΡΠΎ
Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠΎΡΠΎΠ± Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° new
.
ΠΡΠ·ΠΎΠ² new
Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΠΊΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
#include <iostream>
class Point {
int x;
int y;
public:
Point() {
std::cout << "Creating point" << std::endl;
x = 0;
y = 0;
}
};
int main() {
Point *p = new Point();
std::cout << p << std::endl;
return 0;
}
Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ Point
, Π·Π°ΡΠ΅ΠΌ Π² ΡΡΠ½ΠΊΡΠΈΠΈ main()
ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠ°
"ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Point" ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π΅ΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ·ΠΎΠ² new
. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ
ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ
Π² Π‘++ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ Π΅Π΅ Π½Π°Π΄ΠΎ Π»ΠΈΠ±ΠΎ ΡΡΠ°Π·Ρ ΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ,
Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΡΠΎΠ²Π½ΡΡΡ ΠΊ nullptr, ΡΡΠΎΠ±Ρ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΎΠ½Π° Π½ΠΈ Π½Π° ΡΡΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ.
Π£ Π‘++ Π΅ΡΡΡ Π½Π΅ΠΏΡΠΈΡΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ°Π·Π»ΠΈΡΠ°Π΅ΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ
ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΠΌΡ ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΏΠ° "ΠΎΠ±ΡΠ΅ΠΊΡ" ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Ρ
ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Π° .
, Π° Π΅ΡΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ° ΠΈΠ΄Π΅Ρ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ->
. ΠΡΠΈΠΌΠ΅Ρ, Π½ΠΈΠΆΠ΅:
#include <iostream>
class Point {
int x;
int y;
public:
void print(){
std::cout << x << ":" << y << std::endl;
}
Point() {
std::cout << "Creating point" << std::endl;
x = 0;
y = 0;
}
};
int main() {
Point *pPoint = nullptr;
pPoint = new Point();
pPoint->print();
Point point;
point.print();
return 0;
}
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΒΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ. ΠΠΈΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ².
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΄Π°ΠΆΠ΅ ΡΠΈΠΏΠ° void.
- ΠΠ΅Π»ΡΠ·Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΊΠ°Π·Π°ΒΡΠ΅Π»Ρ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ.
- ΠΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π²ΠΈΠ΄ΠΎΠ² ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ).
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
- ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ, ΠΊΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ°. ΠΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ².
- ΠΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π½Π΅ ΡΠΊΠ°Π·Π°Π» Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π΅Π³ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². Π ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠΈ, ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π°Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π΅ ΡΠΌΠ΅Π΅Ρ.
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ.
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Π½Π΅Π»ΡΠ·Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ const, virtual ΠΈ static.
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ main. ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡ ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ).
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π²ΠΈΠ΄ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ
Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ°: T::T(const Π’&) { ... /* Π’Π΅Π»ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° V }
, Π³Π΄Π΅ Π’ - ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ΅ΡΡΡΡΠΊΡΠΎΡ - ΡΡΠΎ ΠΎΡΠΎΠ±ΡΠΉ Π²ΠΈΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΠΈΠΉΡΡ Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ. ΠΠ΅ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ:
- Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² - ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ;
- Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ - ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· main;
- Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ delete.
ΠΡΠ»ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΒΠ΅Ρ ΠΏΡΡΡΠΎΠΉ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ.
ΠΠΌΡ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΈΠ»ΡΠ΄Ρ ~
, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ΅ΡΡΡΡΠΊΡΠΎΡ:
- Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ;
- Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ const ΠΈΠ»ΠΈ static;
- Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ;
- ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ: ifstream - ΠΊΠ»Π°ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²; ofstream - ΠΊΠ»Π°ΡΡ Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²; fstream - ΠΊΠ»Π°ΡΡ Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
ΠΡΠΈ ΠΊΠ»Π°ΡΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΠΎΡ ΠΊΠ»Π°ΡΡΠΎΠ² istream, ostream ΠΈ iostream ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ Π½Π°ΡΠ»Π΅Π΄ΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ << ΠΈ >>, ΡΠ»Π°Π³ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΎΡΡ, ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ Ρ. Π΄. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΡΠ΅Π΄Π³ΡΠ»Π°Π³Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°;
- ΠΎΡΠΊΡΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ;
- ΠΎΠ±ΠΌΠ΅Π½ (Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄);
- ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°;
- Π·Π°ΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π°.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ
ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠΈΡ
ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ.
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π½Π΅ ΡΠ²ΡΠ·ΡΠ²Π°Ρ Π΅Π³ΠΎ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ:
ifstream();
ofstream();
fstream();
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΎΡΒΠΊΡΡΠ²Π°ΡΡ ΡΠ°ΠΉΠ» Ρ ΡΠΊΠ°Π·Π°Π³Π½Ρ
ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ
ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ°ΠΉΠ» Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ:
ifstream(const char *name, ios_base::openmode mode = ios_base::in);
ofstream(const char *name, ios_base::openmode mode = ios_base::out | ios_base::trunc);
fstream(const char *name, ios_base::openmode mode = ios_base::in | ios_base::out);
ΠΡΠΎΡΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°.
Π’Π°ΠΊ ΠΆΠ΅ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ open()
, ΠΊΠΎΡΠΎΡΠ°Ρ Π΅ΡΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠ³Π»ΡΠ΄ΡΡ ΠΎΠ½ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌ:
void open (const char* filename, ios_base::openmode mode = ios_base::in);
void open (const string& filename, ios_base::openmode mode = ios_base::in);
Π§ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π»ΠΈΠ±ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ, Π»ΠΈΠ±ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ².
ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ close() Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
#include <iostream>
#include <fstream>
int main() {
char text[81], buf[81];
std::cout << "ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°:";
std::cin >> text;
// ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°
std::ifstream f(text, std::ios_base::in);
if (!f.is_open()) {
std::cout << "ΠΡΠΈΠ±ΠΊΠ° ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°";
return 1;
}
while (!f.eof()) {
// Π§ΠΈΡΠ°Π΅ΠΌ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ getline()
f.getline(buf, 81);
std::cout << buf << std::endl;
}
// ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π°
f.close();
// ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° open
f.open(text, std::ios_base::in);
if (!f.is_open()) {
std::cout << "ΠΡΠΈΠ±ΠΊΠ° ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°";
return 1;
}
while (!f.eof()) {
// Π§ΠΈΡΠ°Π΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ
f >> buf;
std::cout << buf << std::endl;
}
f.close();
return 0;
}
???
19. ΠΡΠΎΡΡΠΎΠΉ Π²ΠΈΠ΄ ΡΠΏΠΈΡΠΊΠΎΠ² - ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ²ΡΠ·Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² - ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ. Π’Π°ΠΊΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ (ΠΎΠ΄Π½ΠΎΡΠ²ΡΠ·Π½ΡΠΌ). ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊΠΎΠΌ ΠΎΠ΄Π½ΠΎΡΠ²ΡΠ·Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΠΊΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ - ΠΎΡ Π½Π°ΡΠ°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°, Ρ.ΠΊ. Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Ρ ΡΠ°Π½ΠΈΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ.
20. ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°: ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°(ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°:
struct Node
{
int d; // Π΄Π°Π½Π½ΡΠ΅
Node *Ρ; // Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
}
ΠΠ΄Π΅ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π°Π½Π½ΡΡ
, Ρ
ΡΠ°Π½ΡΡΠΈΡ
ΡΡ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ int d
. Node *p
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°.
ΠΠ±ΡΡΠ½ΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Ρ
ΡΠ°Π½ΠΈΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: struct Node *head
. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ
ΡΡΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΅Π³Π΄Π° Π·Π½Π°Π΅Ρ Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΏΡΠΈ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΏΠΈΡΠΊΠ°. Π£ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π°
ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Ρ
ΠΎΡΡ ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ, ΡΠ°Π²Π΅Π½ nullptr. ΠΡΠΈ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
#include <iostream>
struct Node
{
int d; // Π΄Π°Π½Π½ΡΠ΅
Node *next; // Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
};
int main() {
Node *head = nullptr; // ΠΠΎΠΊΠ° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅Ρ. Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΡΡΡ
head = new Node; // Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΡ
head->d = 1; // ΠΠ°Π΄Π°Π΄ΠΈΠΌ Π½Π΅ΠΊΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ
head->next = nullptr; // Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ null, Ρ.ΠΊ. Π±ΠΎΠ»ΡΡΠ΅ Π² ΡΠΏΠΈΡΠΊΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅Ρ
// Π’Π΅ΠΏΠ΅ΡΡ head ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°. ΠΠ½ ΠΆΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ.
Node *e = head; // ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° Π½Π°ΡΠ°Π»ΠΎ ΡΠΏΠΈΡΠΊΠ°.
while(e != nullptr) { // ΡΠΊΠ°Π½ΠΈΡΡΠ΅ΠΌ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ° Π½Π΅ nullptr
std::cout << e->d << std::endl;
e = e->next; // ΠΡΠΈΡΠ²ΠΎΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ e, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
}
return 0;
}
21. ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ°
22. ΠΡΠΎΡΡΠΎΠΉ Π²ΠΈΠ΄ ΡΠΏΠΈΡΠΊΠΎΠ² - ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ, Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΠΌΡΠ»ΡΡΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ
23. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ: Π²ΡΡΠ°Π²ΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°(Π²Π°ΡΠΈΠ°Π½ΡΡ)
24. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ: ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°(Π²Π°ΡΠΈΠ°Π½ΡΡ)
#include <iostream>
struct Node
{
int d; // Π΄Π°Π½Π½ΡΠ΅
Node *next; // Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
};
struct List { // Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠ°
Node *head; // Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°. nullptr Π΅ΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΡΡ
Node *tail; // Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ½Π΅Ρ.
};
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°
List *create_list() {
List *result = new List; // Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ ΡΠΏΠΈΡΠΊΠ°
result->head = nullptr; // ΠΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΡΡΠΎΠΉ
return result;
}
// ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΡΠΏΠΈΡΠΊ
void add_node(List *list, int data) {
Node *newNode = new Node;
newNode->d = data;
newNode->next = nullptr;
if(list->head == nullptr) { // Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΡΡΡΠΎΠΉ
list->head = newNode; // ΠΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΌ
} else {
list->tail->next = newNode; // Π ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠ° ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ - Π²Π½ΠΎΠ²ΡΡΠΎΠ·Π΄Π°Π½ΡΠΉ.
}
list->tail = newNode; // ΠΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½Π½ΠΎΠΌΡ Π² ΡΡΡΡΠΊΡΡΡΠ΅ ΡΠΏΠΈΡΠΊΠ°.
}
// Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°
void del_node(List *list, Node *node) {
if( node == list->head ) { // ΠΠ°Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΠΊΠ°Π·Π°Π»ΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π² ΡΠΏΠΈΡΠΊΠ΅
list->head = node->next; // Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΡΠ°Π» ΡΠ»Π΅Π΄ΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
delete node; // Π£Π΄Π°Π»ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ node
return;
}
// ΠΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΎΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ
Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
Node *e; // Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
e = list->head; // ΠΡΠΈΡΠ²ΠΎΠΈΠΌ Π΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°
while(e->next != node) { // ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌΡΡ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ ΠΏΠΎΠΊΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° Π½Π°Ρ
e = e->next; // ΠΡΠΈΡΠ²ΠΎΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
}
// ΠΡΠ»ΠΈ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ, Π½Π°Π΄ΠΎ ΠΏΡΠΈΡΠΎΠ²ΠΈΡΡ tail Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ·Π»Π°
if(node == list->tail) {
list->tail = e;
}
// Π ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΡΠΊΠΎΠΌΡΠΉ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π°
// ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π΄Π»Ρ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ(Π΄ΠΎ ΡΡΠΎΠ³ΠΎ ΡΡΠΎΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π» Π½Π° ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
e->next = node->next;
delete node; // Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ
}
// ΠΠΎΠΈΡΠΊ ΡΠ·Π»Π°, Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ
Node *find_node(List *list, int value) {
Node *e = list->head; // Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΠΌ Π΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
while(e != nullptr) { // ΠΡΠ΄Π΅ΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ nullptr
if( e->d == value) { // ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠ°Π²Π½ΠΎ ΠΈΡΠΊΠΎΠΌΠΎΠΌΡ - ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
break;
}
e = e->next; // ΠΡΠΈΡΠ²ΠΎΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ
}
// ΠΡΠ»ΠΈ Π²ΡΡ
ΠΎΠ΄ ΠΈΠ· ΡΠΈΠΊΠ»Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ ΠΏΠΎ if(e->d==value) - Π·Π½Π°ΡΠΈΡ ΠΌΡ Π½Π°ΡΠ»ΠΈ Π½ΡΠΆΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π½Π΅Π³ΠΎ
// Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² e.
// ΠΡΠ»ΠΈ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ e Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ nullptr. ΠΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π΅Ρ
return e;
}
// Π Π°ΡΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ°
void print_list(List *list) {
Node *e = list->head;
do {
std::cout << e->d << " ";
e = e->next;
} while(e!= nullptr);
std::cout << std::endl;
}
void destroy_list(List *list) {
Node *e = list->head; // Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅ΠΌ Π΅ΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°
do { // Π‘ΠΊΠ°Π½ΠΈΡΡΠ΅ΠΌ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° e Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
Node *node_to_del = e; // Π‘ΠΎΡ
ΡΠ°Π½ΠΈΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² node_to_del
e = e->next; // Π‘ΠΎΡ
ΡΠ°Π½ΠΈΠΌ Π² e ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
delete node_to_del; // Π£Π΄Π°Π»ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ
} while(e != nullptr);
delete list; // ΠΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΠΌ ΠΏΠ°ΠΌΡΡΡ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΠΎΠ΄ ΡΡΡΡΠΊΡΡΡΡ ΡΠΏΠΈΡΠΊΠ°
}
int main() {
List *list = create_list(); // Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΡ Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠ°
add_node(list, 1); // ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 1
add_node(list, 2); // 2
add_node(list, 3); // 3
add_node(list, 4); // 4
add_node(list, 5); // 5
print_list(list);
Node *n = find_node(list, 8); // ΠΠ°ΠΉΠ΄Π΅ΠΌ ΡΠ·Π΅Π» ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 8
if(n != nullptr) { // ΠΡΠ»ΠΈ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π΅ΡΠ½ΡΠ»ΠΎΡΡ nullptr, Π·Π½Π°ΡΠΈΡ ΡΠ·Π΅Π» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½. ΠΠ³ΠΎ ΡΠ°ΠΌ Π½Π΅Ρ, ΠΌΡ Π΅Π³ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ.
del_node(list, n);
}
print_list(list);
n = find_node(list, 4); // ΠΠ°ΠΉΠ΄Π΅ΠΌ ΡΠ·Π΅Π» ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 4
if(n != nullptr) { // Π ΡΡΠΎΡ ΡΠ°Π· Π½Π°ΠΉΠ΄Π΅ΡΡΡ ΠΈ Π² n, Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
del_node(list, n); // Π£Π΄Π°Π»ΠΈΠΌ ΡΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°
}
print_list(list);
n = find_node(list, 1); // ΠΠ°ΠΉΠ΄Π΅ΠΌ ΡΠ·Π΅Π» ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 1
if(n != nullptr) { // ΠΠ½ ΡΡΡ Π΅ΡΡΡ. Π ΠΌΡ ΠΏΡΠ°Π²Π΅ΡΠΈΠΌ, ΠΊΠ°ΠΊ Ρ Π½Π°Ρ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ "Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ" ΡΠ»Π΅ΠΌΠ΅Π½Ρ
del_node(list, n); // Π£Π΄Π°Π»ΡΠ΅ΡΡΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ. Π’Π΅ΠΏΠ΅ΡΡ "Π³ΠΎΠ»ΠΎΠ²Π°" ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ 2
}
print_list(list);
n = find_node(list, 5); // ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π°Ρ
ΠΎΡΠΈΠΌ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
if(n != nullptr) {
del_node(list, n); // ΠΡ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ, ΡΠ°ΠΊ ΡΡΠΎ Π²ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅
}
print_list(list);
add_node(list, 88); // ΠΠ° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
print_list(list);
destroy_list(list); // Π£Π±ΡΠ΅ΠΌ ΠΎΡΡΠ°ΡΠΊΠΈ ΡΠΏΠΈΡΠΊΠ°
print_list(list); // ΠΠΉ Π°ΠΉ Π°ΠΉ, Π½Π΅ Π½Π°Π΄ΠΎ ΡΠ°ΠΊ. Π‘ΠΏΠΈΡΠΊΠ° ΡΠΆΠ΅ Π½Π΅ΡΠͺ. ΠΡΠ²Π΅Π΄Π΅Ρ ΠΌΡΡΠΎΡ ΠΈΠ»ΠΈ ΡΠΏΠ°Π΄Π΅Ρ
return 0;
}