C++: Różnice pomiędzy wersjami
Ostrzyciel (dyskusja • edycje) M (→Zobacz też: +1) |
M |
||
Linia 1: | Linia 1: | ||
{{programisto}} |
{{programisto}} |
||
{{cytat|< |
{{cytat|<syntaxhighlight lang="cpp">long long ago; // in a galaxy far far away</syntaxhighlight>|C++ o [[Gwiezdne wojny|Gwiezdnych wojnach]]}} |
||
{{programowanie}} |
{{programowanie}} |
||
'''C++''' (z [[język angielski|ang]]. Si Plask Plask) – ezoteryczny, wieloparadygmatowy, wielofunkcyjny, uniwersalny, obiektowy, generyczny, niskopoziomowy, proceduralny, strukturalny, funkcyjny, imperatywny, uogólniony, logiczny, aspektowy, deklaratywny, agentowy, modularny, bezsensowny język programowania będący dla [[C (język programowania)|C]] tym, czym jest [[Nonsensopedia]] dla [[Wikipedia|Wikipedii]] (albo na odwrót). Przez [[noob]]ów programistycznych uważany za język z największymi możliwościami, lecz oni się nie znają, wszystko da się łatwo zakodzić w [[asembler]]ze. |
'''C++''' (z [[język angielski|ang]]. Si Plask Plask) – ezoteryczny, wieloparadygmatowy, wielofunkcyjny, uniwersalny, obiektowy, generyczny, niskopoziomowy, proceduralny, strukturalny, funkcyjny, imperatywny, uogólniony, logiczny, aspektowy, deklaratywny, agentowy, modularny, bezsensowny język programowania będący dla [[C (język programowania)|C]] tym, czym jest [[Nonsensopedia]] dla [[Wikipedia|Wikipedii]] (albo na odwrót). Przez [[noob]]ów programistycznych uważany za język z największymi możliwościami, lecz oni się nie znają, wszystko da się łatwo zakodzić w [[asembler]]ze. |
||
Linia 22: | Linia 22: | ||
Przeładowanie operatorów służy temu, by „+” (plus) oznaczał odejmowanie, „-” (dywiz) – dzielenie, a „/” (slesz) – wyświetlenie napisu „Hello, world!”. Dzięki temu nikt nie będzie w stanie zorientować się, co dany fragment kodu robi. |
Przeładowanie operatorów służy temu, by „+” (plus) oznaczał odejmowanie, „-” (dywiz) – dzielenie, a „/” (slesz) – wyświetlenie napisu „Hello, world!”. Dzięki temu nikt nie będzie w stanie zorientować się, co dany fragment kodu robi. |
||
< |
<syntaxhighlight lang="cpp"> |
||
int operator+(int a, int b) // plus oznacza odejmowanie |
int operator+(int a, int b) // plus oznacza odejmowanie |
||
{ |
{ |
||
Linia 49: | Linia 49: | ||
// jak łatwo się domyslić, program wypisuje "0" |
// jak łatwo się domyslić, program wypisuje "0" |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
=== Instrukcje preprocesora === |
=== Instrukcje preprocesora === |
||
Linia 55: | Linia 55: | ||
Przykład zastosowania: |
Przykład zastosowania: |
||
< |
<syntaxhighlight lang="cpp"> |
||
#define true false |
#define true false |
||
#define public private |
#define public private |
||
Linia 64: | Linia 64: | ||
#define g h 1 p 1##*##1##/##1 m 1 h 1 m 1 m 1 h |
#define g h 1 p 1##*##1##/##1 m 1 h 1 m 1 m 1 h |
||
// jak łatwo się domyślić, litera 'g' służy do odejmowania |
// jak łatwo się domyślić, litera 'g' służy do odejmowania |
||
</syntaxhighlight> |
|||
</source> |
|||
=== Szablony === |
=== Szablony === |
||
Linia 71: | Linia 71: | ||
Funkcja „min” w stylu C (makro preprocesora): |
Funkcja „min” w stylu C (makro preprocesora): |
||
< |
<syntaxhighlight lang="cpp"> |
||
#define min(a,b) ((a) > (b) ? (b) : (a)) |
#define min(a,b) ((a) > (b) ? (b) : (a)) |
||
</syntaxhighlight> |
|||
</source> |
|||
Funkcja „min” w stylu C++ (szablon funkcji): |
Funkcja „min” w stylu C++ (szablon funkcji): |
||
< |
<syntaxhighlight lang="cpp"> |
||
template <typename typ> |
template <typename typ> |
||
typ min(typ a, typ b) |
typ min(typ a, typ b) |
||
Linia 83: | Linia 83: | ||
return ((a) > (b) ? (b) : (a)); |
return ((a) > (b) ? (b) : (a)); |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
=== Znane stwierdzenia === |
=== Znane stwierdzenia === |
Wersja z 13:52, 10 paź 2021
Uwaga! Jest po północy! Programisto! Czy wiesz gdzie wskazuje teraz Twój wskaźnik? |
long long ago; // in a galaxy far far away
- C++ o Gwiezdnych wojnach
Ten artykuł jest częścią cyklu naukowego języki komputerowe. |
Języki programowania: |
Inne języki komputerowe: |
|
edytuj ten szablon |
C++ (z ang. Si Plask Plask) – ezoteryczny, wieloparadygmatowy, wielofunkcyjny, uniwersalny, obiektowy, generyczny, niskopoziomowy, proceduralny, strukturalny, funkcyjny, imperatywny, uogólniony, logiczny, aspektowy, deklaratywny, agentowy, modularny, bezsensowny język programowania będący dla C tym, czym jest Nonsensopedia dla Wikipedii (albo na odwrót). Przez noobów programistycznych uważany za język z największymi możliwościami, lecz oni się nie znają, wszystko da się łatwo zakodzić w asemblerze.
Wersja od M$ najbardziej słynie z błędów kompilacji wbudowanych bibliotek. Zdarzają się również błędy typu:
LNK431**** UNRESOLVED EXTERNAL SYMBOL [...]
Oznaczają one iż taka funkcja w rzeczywistości nie istnieje, została dodana tylko po to aby zwiększyć liczbę wbudowanych funkcji, czyniąc język bardziej pożytecznym.
Zastosowanie
C++ jest uznawane za świetny język dla alfonsów, gdyż posiada (w najnowszym standardzie) zestaw seksownych funkcji. Oto część z nich:
stoi
– funkcja wywołująca stanie;string
– klasa do manipulacji stringami;wstring
– klasa do manipulacji szerokimi stringami (wide string);to_string
– zaglądanie w stringi;to_wstring
– zaglądanie w szerokie stringi.
Nowości
W porównaniu z C, język posiada wiele nowych możliwości, które czynią składnię jeszcze bardziej zagmatwaną i trudniejszą do zrozumienia.
Przeładowanie operatorów
Przeładowanie operatorów służy temu, by „+” (plus) oznaczał odejmowanie, „-” (dywiz) – dzielenie, a „/” (slesz) – wyświetlenie napisu „Hello, world!”. Dzięki temu nikt nie będzie w stanie zorientować się, co dany fragment kodu robi.
int operator+(int a, int b) // plus oznacza odejmowanie
{
return a-b;
}
int operator-(int a, int b) // minus oznacza dzielenie
{
return a/b;
}
int operator/(int a, int b) // slesz powoduje wypisanie "Hello world!"
// i zawsze daje wynik 7
{
std::cout << "Hello, world!" << std::endl;
return 7;
}
int main()
{
int a,b,c;
// przypisujemy liczbom "a" i "b" wartosć "2"
a=2;
b=2;
// przypisujemy liczbie "c" wartosć "a+b"
c=a+b;
// wypisujemy wartosć "c" na ekran
std::cout << c << std::endl;
// jak łatwo się domyslić, program wypisuje "0"
}
Instrukcje preprocesora
C++ jak i jego poprzednik zawiera bardzo przydatną, skracającą czas pisania i ułatwiającą zrozumienie języka instrukcję #define. Przykład zastosowania:
#define true false
#define public private
#define p -
#define m +
#define l p 1 m 1 p
#define h l 1 m 1 p 1 m 1 l
#define g h 1 p 1##*##1##/##1 m 1 h 1 m 1 m 1 h
// jak łatwo się domyślić, litera 'g' służy do odejmowania
Szablony
Twórca C++, pragnąc wyzwolić programistów od złego Doktora Preprocesora, stworzył coś, co nazwał systemem szablonów. Szablony umożliwiają napisanie tego, co dawniej zajmowało jedną linię, w pięciu liniach.
Funkcja „min” w stylu C (makro preprocesora):
#define min(a,b) ((a) > (b) ? (b) : (a))
Funkcja „min” w stylu C++ (szablon funkcji):
template <typename typ>
typ min(typ a, typ b)
{
return ((a) > (b) ? (b) : (a));
}
Znane stwierdzenia
- Wszystkie znaki prowadzą do main().
- Od zarania dziejów człowiek utrudnia sobie życie. Można porównać słowa C i C++.
- Każdy człowiek wie, że Windows 7 na Delphi pisany jest.
- C++ to język obiektowy (i nie tylko), który ma za zadanie dodać nowe wyrażenia do istniejących funkcji.
- Biblioteka. Skąd to się bierze?
- C sprawia, że łatwo jest sobie strzelić w stopę. Z C++ jest to trudniejsze, ale za to w razie czego odstrzelisz sobie całą nogę.
- Jeśli istnieje jakaś szalona koncepcja, ocierająca się o granice absurdu i niewykonalności, to na pewno da się ją zrealizować w C++. Na przykład dzięki szablonom można pisać programy, które nie zawierają ani jednej zmiennej (sic!).