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}} |
|||
{{cytat|<syntaxhighlight lang="cpp">long long ago; // in a galaxy far far away</syntaxhighlight>|C++ o [[Gwiezdne wojny|Gwiezdnych wojnach]]}} |
|||
{{programowanie}} |
{{programowanie}} |
||
'''C++''' |
'''C++''' – 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: |
|||
* <code>stoi</code> – funkcja wywołująca stanie; |
|||
* <code>string</code> – klasa do manipulacji stringami; |
|||
* <code>wstring</code> – klasa do manipulacji szerokimi stringami (wide string); |
|||
* <code>to_string</code> – zaglądanie w stringi; |
|||
* <code>to_wstring</code> – zaglądanie w szerokie stringi; |
|||
* <code>sprintf</code> – funkcja do ekspresowej kopulacji (najczęściej używana razem ze stoi). |
|||
== 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 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. |
|||
=== Przeciążanie operatorów === |
|||
<syntaxhighlight lang="cpp"> |
|||
'''Przeciążanie 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. |
|||
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" |
|||
} |
|||
</syntaxhighlight> |
|||
Mówiąc po ludzku: przeciążanie operatorów jest wtedy, gdzy „+” (plus) oznacza odejmowanie, „-” (minus) – dzielenie, a „/” (slesz) – wyświetlenie napisu „Hello, world!”. Dzięki temu nikt nie będzie w stanie zorientować się, co dany fragment kodu robi. |
|||
=== 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: |
|||
<span style="color:#440088;"><b>int</b></span> operator+(<span style="color:#440088;"><b>int</b></span> a, <span style="color:#440088;"><b>int</b></span> b) <span style="color:#666666;">// plus oznacza odejmowanie</span> |
|||
<syntaxhighlight lang="cpp"> |
|||
{ |
|||
#define true false |
|||
<span style="color:#880044;"><b>return</b></span> a-b; |
|||
#define public private |
|||
} |
|||
#define p - |
|||
<span style="color:#440088;"><b>int</b></span> operator-(<span style="color:#440088;"><b>int</b></span> a, <span style="color:#440088;"><b>int</b></span> b) <span style="color:#666666;">// minus oznacza dzielenie</span> |
|||
#define m + |
|||
{ |
|||
#define l p 1 m 1 p |
|||
<span style="color:#880044;"><b>return</b></span> a/b; |
|||
#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 |
|||
<span style="color:#440088;"><b>int</b></span> operator/(<span style="color:#440088;"><b>int</b></span> a, <span style="color:#440088;"><b>int</b></span> b) <span style="color:#666666;">// slesz powoduje wypisanie "Hello world!"</span> |
|||
// jak łatwo się domyślić, litera 'g' służy do odejmowania |
|||
<span style="color:#666666;">// i zawsze daje wynik 7</span> |
|||
</syntaxhighlight> |
|||
{ |
|||
<span style="color:#aa0011;">std::cout</span> << "<b><i>Hello, world!</i></b>" << <span style="color:#aa0011;">std::endl</span>; |
|||
<span style="color:#880044;"><b>return</b></span> 7; |
|||
} |
|||
<span style="color:#440088;"><b>int</b></span> main() |
|||
{ |
|||
<span style="color:#440088;"><b>int</b></span> a,b,c; |
|||
<span style="color:#666666;">// przypisujemy liczbom "a" i "b" wartosc "2"</span> |
|||
a=2; |
|||
b=2; |
|||
<span style="color:#666666;">// przypisujemy liczbie "c" wartosc "a+b"</span> |
|||
c=a+b; |
|||
<span style="color:#666666;">// wypisujemy wartosc "c" na ekran</span> |
|||
<span style="color:#aa0011;">std::cout</span> << c << <span style="color:#aa0011;">std::endl</span>; |
|||
<span style="color:#666666;">// jak latwo sie domyslic, program wypisuje "0"</span> |
|||
} |
|||
=== Szablony === |
=== Szablony === |
||
Linia 71: | Linia 44: | ||
Funkcja „min” w stylu C (makro preprocesora): |
Funkcja „min” w stylu C (makro preprocesora): |
||
#define min(a,b) ((a) > (b) ? (b) : (a)) |
|||
<syntaxhighlight lang="cpp"> |
|||
#define min(a,b) ((a) > (b) ? (b) : (a)) |
|||
</syntaxhighlight> |
|||
Funkcja „min” w stylu C++ (szablon funkcji): |
Funkcja „min” w stylu C++ (szablon funkcji): |
||
template <typename typ> |
|||
typ min(typ a, typ b) |
|||
{ |
|||
return ((a) > (b) ? (b) : (a)); |
|||
} |
|||
Niestety, nie udało się wyeliminować preprocesora z C++, bo wciąż jest on potrzebny do łączenia plików źródłowych (<code>#include</code>). |
|||
<syntaxhighlight lang="cpp"> |
|||
template <typename typ> |
|||
typ min(typ a, typ b) |
|||
{ |
|||
return ((a) > (b) ? (b) : (a)); |
|||
} |
|||
</syntaxhighlight> |
|||
=== Znane stwierdzenia === |
=== Znane stwierdzenia === |
||
# C++ jest jak zwykła kromka chleba z pomidorem. |
|||
# 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 |
# Każdy człowiek wie, że Windows 7 na Delphi pisany jest. |
||
# C++ to język obiektowy |
# C++ to język obiektowy, 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? |
||
{{stubinf}} |
|||
# 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]] |
||
[[zh:C++]] |
|||
[[el:C++]] |
|||
[[en:C++]] |
|||
[[es:C--]] |
|||
[[fr:C++]] |
|||
[[ja:C++]] |
|||
[[pt:C++]] |
|||
[[ru:Си плюс минус]] |
|||
[[zh-tw:C++]] |