You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: cpp_inst01.md
+8-13Lines changed: 8 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,8 +10,8 @@ author: J. Gałecki
10
10
### Współczesny C++
11
11
Niniejszy tekst rozpoczyna cykl instrukcji stanowiących kurs wprowadzający do języka C++.
12
12
Język ten, pomimo swojego dojrzałego wieku, wciąż bardzo dynamicznie się rozwija.
13
-
W chwili pisania tej instrukcji, jego najnowszą odsłonę stanowi niedawno zatwierdzony standard C\+\+20.
14
-
Komitet ISO, który go wydaje, pracuje obecnie w trzyletnim cyklu; dotychczasowe wydania standardu to C\+\+98, C\+\+03, C\+\+11, C\+\+14, C\+\+17i C\+\+20 (następna planowana wersja to C++23).
13
+
W chwili pisania tej instrukcji, jego najnowszą odsłonę stanowi niedawno zatwierdzony standard C\+\+23.
14
+
Komitet ISO, który go wydaje, pracuje obecnie w trzyletnim cyklu; dotychczasowe wydania standardu to C\+\+98, C\+\+03, C\+\+11, C\+\+14, C\+\+17, C\+\+20 i C\+\+23 (następna planowana wersja to C++26).
15
15
Wspominamy o tym, gdyż dobrze napisany kod w ww. języku wygląda dziś znacząco inaczej, niż kilkanaście lat temu.
16
16
W czasie trwania zajęć postaramy się przedstawić czytelnikowi możliwie jak najbardziej współczesne elementy języka oraz schematy programowania.
17
17
Postaramy się zaznaczać, w którym standardzie pojawił się dany element i dlaczego wyparł on ten wcześniej używany (lub jaką lukę wypełnia).
@@ -110,10 +110,10 @@ Takie struktury były już dostępne w C.
110
110
W C\+\+ klasy mogą mieć także metody:
111
111
112
112
```C++
113
-
#include<iostream>
113
+
#include<print>
114
114
structHuman
115
115
{
116
-
void printAge() { std::cout << age << '\n'; }
116
+
void printAge() { std::println("{}", age); }
117
117
118
118
int age;
119
119
double height;
@@ -139,19 +139,19 @@ Klasa może mieć dowolną liczbę konstruktorów (rozróżnianych typami podawa
139
139
Destruktor to metoda wywoływana przy niszczeniu obiektów danej klasy.
140
140
141
141
```C++
142
-
#include<iostream>
142
+
#include<print>
143
143
structHuman
144
144
{
145
145
Human(int a, double h, std::string n)
146
146
{
147
147
age = a;
148
148
height = h;
149
149
name = n;
150
-
std::cout << "Hello, " << name << "!\n";
150
+
std::println("Hello, {}!", name);
151
151
}
152
152
~Human()
153
153
{
154
-
std::cout << "Goodbye, " << name << "...\n";
154
+
std::print("Goodbye, {}...", name);
155
155
}
156
156
157
157
int age;
@@ -263,7 +263,7 @@ private:
263
263
#### Zadanie 4
264
264
Dodaj do klasy `Wektor2D` metody `setX`, `getX`, `setY` i `getY`, służące do odczytywania i modyfikowania współrzędnych wektora.
265
265
Uczyń pola opisujące współrzędne prywatnymi.
266
-
Co stanie się, gdy spróbujesz zawołać np. `std::cout << wektor.x;`?
266
+
Co stanie się, gdy spróbujesz zawołać np. `std::print("{}", wektor.x)`?
267
267
268
268
### Przeciążanie operatorów
269
269
W języku C++ operatory ([tu znajdziesz ich listę](https://en.cppreference.com/w/cpp/language/operators)) możemy przeciążać tak samo jak wszystkie inne funkcje.
@@ -299,10 +299,6 @@ Więcej na temat szczególnego operatora `=` powiemy na kolejnych zajęciach.
299
299
#### Zadanie 5
300
300
Przeciąż operatory `+` i `*` tak, aby były zdefiniowane dla klasy `Wektor2D` (zgodnie z tradycyjną algebrą).
301
301
302
-
#### Zadanie 6
303
-
Przeciąż operator `<<` tak, aby można było zawołać `std::cout << wektor;`.
304
-
Następnie przeciąż go tak, aby można było zawołać `std::cout << wektor1 << wektor2 /* << ... */ << wektorn`.
305
-
306
302
### Pola i metody statyczne
307
303
Dotychczas definiowaliśmy pola i metody, które operowały na konkretnym obiekcie danej klasy (np. imię jest indywidualną cechą każdego człowieka).
308
304
Czasem przydatne mogą być także pola i metody statyczne, czyli zdefiniowane dla całej klasy, nie dla jej poszczególnych instancji.
@@ -359,7 +355,6 @@ Zweryfikuj, czy konwersja współrzędnych z jednego układu współrzędnych na
359
355
- Domyślny konstruktor wektora może pozostać publiczny. Punkt (0, 0) pokrywa się w obu układach współrzędnych, nie ma tu dwuznaczności.
360
356
361
357
## Pytania na koniec
362
-
- Czym jest `std::cout` (do jakiej kategorii bytów należy)? Jaki ma scope ("zasięg istnienia")?
363
358
- Z jakiego konstruktora klasy `std::string` korzystaliśmy w klasie `Human`?
364
359
- Czy klasa może mieć więcej niż 1 destruktor? Dlaczego?
365
360
- Na ile sposobów możemy zdefiniować `operator+` dla klasy `Wektor2D`? W razie wątpliwości zajrzyj [tutaj](https://youtu.be/gjFrjNK3Dq4).
0 commit comments