Edytujesz „C++”

Z Nonsensopedii, polskiej encyklopedii humoru

Uwaga: Nie jesteś zalogowany. Jeśli wykonasz jakąkolwiek zmianę, Twój adres IP będzie widoczny publicznie. Jeśli zalogujesz się lub utworzysz konto, Twoje zmiany zostaną przypisane do konta, wraz z innymi korzyściami.

Ta edycja może zostać anulowana. Porównaj ukazane poniżej różnice między wersjami, a następnie zapisz zmiany.

Aktualna wersja Twój tekst
Linia 1: Linia 1:
{{programisto}}
{{programisto}}
<br />{{programowanie}}
{{cytat|<syntaxhighlight lang="cpp">long long ago; // in a galaxy far far away</syntaxhighlight>|C++ o [[Gwiezdne wojny|Gwiezdnych wojnach]]}}
{{cytat|<source lang="cpp">long long ago; // in a galaxy far far away</source>|C++ o [[Gwiezdne wojny|Gwiezdnych wojnach]]}}
{{programowanie}}
{{cytat|<source lang="cpp">long long ago;
'''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.
int a; //galaxy
for(int i=away;away<1;away++)</source>|Udoskonalona wersja powyższego kodu}}
'''C++''' (z [[język angielski|ang]]. Si Plask Plask) – ezoteryczny, wieloparadygmatowy, wielofunkcyjny, uniwersalny, obiektowy, generyczny, niskopoziomowy, bezsensowny język programowania będący dla [[C (język programowania)|C]] tym, czym jest [[Nonsensopedia]] dla [[Wikipedia|Wikipedii]] (albo na odwrót).


Wersja od M$ najbardziej słynie z błędów kompilacji wbudowanych bibliotek. Zdarzają się również błędy typu:
<code>LNK431**** UNRESOLVED EXTERNAL SYMBOL [...]</code>
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 [[Alfonsi|alfonsów]], gdyż posiada (w najnowszym standardzie) zestaw seksownych funkcji. Oto część z nich:
C++ jest uznawane za świetny język dla [[Alfonsi|alfonsów]], gdyż posiada (w najnowszym standardzie) zestaw seksownych funkcji. Oto część z nich:
* <code>stoi</code> – funkcja wywołująca stanie;
* <code>stoi</code> – funkcja wywołująca stanie;
Linia 14: Linia 12:
* <code>wstring</code> – klasa do manipulacji szerokimi stringami (wide string);
* <code>wstring</code> – klasa do manipulacji szerokimi stringami (wide string);
* <code>to_string</code> – zaglądanie w stringi;
* <code>to_string</code> – zaglądanie w stringi;
* <code>to_wstring</code> – zaglądanie w szerokie stringi;
* <code>to_wstring</code> – zaglądanie w szerokie stringi.

* <code>sprintf</code> – funkcja do ekspresowej kopulacji (najczęściej używana razem ze stoi).
Wersja od M$ najbardziej słynie z błędów kompilacji wbudowanych bibliotek. Zdarzają się również błędy typu:
<code>LNK431**** UNRESOLVED EXTERNAL SYMBOL [...]</code>
Oznaczają one iż taka funkcja w rzeczywistości nie istnieje, została dodana tylko po to aby zwiększyć liczbę wbudowanych funkcji tworząc język bardziej pożytecznym.


== Nowości ==
== 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.
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.

=== Klasy ===
W związku z wszechobecną modą na programownaie obiektowe, w C++ wprowadzono klasy, które są dokładnie tym samym, co znane z C struktury. Jedyną różnicą jest to, że pola i metody struktur są domyślnie publiczne, a pola i metody klas są domyślnie prywatne, ale i tak nikt nie wie, co to znaczy.


=== Przeładowanie operatorów ===
=== Przeładowanie operatorów ===
'''Przeładowanie operatorów''' – jak sama nazwa wskazuje, jest to rodzaj polimorfizmu pozwalający zdefiniować rożne zachowanie operatora w zależności od przyjętych operandó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.

Mówiąc po ludzku: przeładowanie operatorów jest wtedy, gdy „+” (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">
<source lang="cpp">
int operator+(int a, int b) // plus oznacza odejmowanie
int operator+(int a, int b) // plus oznacza odejmowanie
{
{
Linia 50: Linia 56:
// jak łatwo się domyslić, program wypisuje "0"
// jak łatwo się domyslić, program wypisuje "0"
}
}
</source>
</syntaxhighlight>


=== Instrukcje preprocesora ===
=== Instrukcje preprocesora ===
Linia 56: Linia 62:
Przykład zastosowania:
Przykład zastosowania:


<syntaxhighlight lang="cpp">
<source lang="cpp">
#define true false
#define true false
#define public private
#define public private
Linia 65: Linia 71:
#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
</source>
</syntaxhighlight>


=== Szablony ===
=== Szablony ===
Linia 72: Linia 78:
Funkcja „min” w stylu C (makro preprocesora):
Funkcja „min” w stylu C (makro preprocesora):


<syntaxhighlight lang="cpp">
<source lang="cpp">
#define min(a,b) ((a) > (b) ? (b) : (a))
#define min(a,b) ((a) > (b) ? (b) : (a))
</source>
</syntaxhighlight>


Funkcja „min” w stylu C++ (szablon funkcji):
Funkcja „min” w stylu C++ (szablon funkcji):


<syntaxhighlight lang="cpp">
<source lang="cpp">
template <typename typ>
template <typename typ>
typ min(typ a, typ b)
typ min(typ a, typ b)
Linia 84: Linia 90:
return ((a) > (b) ? (b) : (a));
return ((a) > (b) ? (b) : (a));
}
}
</source>
</syntaxhighlight>

Niestety, nie udało się wyeliminować preprocesora z C++, bo wciąż jest on potrzebny do łączenia plików źródłowych (<code>#include</code>).


=== Znane stwierdzenia ===
=== Znane stwierdzenia ===
# Wszystkie znaki prowadzą do main().
# Wszystkie znaki prowadzą do main().
# Od zarania dziejów człowiek utrudnia sobie życie. Można porównać słowa C i C++.
# 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.
# 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.
# 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?
# 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ę.
# 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!).

== Zobacz też ==
* [[programowanie obiektowe]]
* [[C (język programowania)]]
* [[C Sharp|C#]]
* [[CCC]]
* [[CMake]]


{{stopka}}
[[Kategoria:Języki programowania]]
[[Kategoria:Języki programowania]]


Cc-white.svg Wszystko, co napiszesz na Nonsensopedii, zgadzasz się udostępnić na licencji cc-by-sa-3.0 i poddać moderacji.
NIE UŻYWAJ BEZ POZWOLENIA MATERIAŁÓW OBJĘTYCH PRAWEM AUTORSKIM!
Anuluj Pomoc w edycji (otwiera się w nowym oknie)