C++: Różnice pomiędzy wersjami

Z Nonsensopedii, polskiej encyklopedii humoru
M („Cpp” przeniesiono do „C++” nad przekierowaniem: czemu nie?)
(→‎Zastosowanie: sprintf)
Znaczniki: mobilna mobilna www
 
(Nie pokazano 83 wersji utworzonych przez 56 użytkowników)
Linia 1: Linia 1:
{{Programowanie}}
{{programisto}}
{{cytat|<syntaxhighlight lang="cpp">long long ago; // in a galaxy far far away</syntaxhighlight>|C++ o [[Gwiezdne wojny|Gwiezdnych wojnach]]}}
'''C++''' – nowoczesne, wielofunkcyjne rozszerzenie [[C (język programowania)|języka C]]. W odróżnieniu od [[C (język programowania)|C]] opiera się nie na [[funkcja|funkcjach]], lecz na [[programowanie obiektowe|obiektach]], co w połączeniu z typowymi dla C instrukcjami niskiego poziomu pozwala pisać [[program|programy]] 10E+5 do 10E+10 razy mniej czytelne niż w C.
{{programowanie}}
Składnia C++ jest aż tak nieczytelna, że dużo łatwiej domyślić się, do czego służy program po jego kodzie binarnym niż w źródle, tzw. cepie. Mało osób zna C++, lecz wszyscy C.
'''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.


Wersja od M$ najbardziej słynie z błędów kompilacji wbudowanych bibliotek. Zdarzają się również błędy typu:
==Czego potrzeba na początek?==
<code>LNK431**** UNRESOLVED EXTERNAL SYMBOL [...]</code>
Aby poznać trudy programowania (a przynajmniej podstawy), potrzeba następujących rzeczy:
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.
* '''[[komputer|komputera]]''' – pisanie programów na kartce jest więcej niż niewygodne;
* '''[[kompilator|kompilatora]]''' – jest to program, który ''spróbuje'' przetłumaczyć nasze wypociny na język zrozumiały dla komputera; Początkujący nazywają go "komplikatorem", jest to błędna nazwa, chociaż oddaje wiele prawdy.
* '''świętej cierpliwości''' – przydatna, jeśli wciąż wyskakują nam błędy, a my nie potrafimy ich znaleźć. Jej brak skutkuje często zniszczeniem sprzętu przy pomocy głowy walącej w klawiaturę, nogi kopiącej jednostkę centralną, czy pięści rozbijającej monitor.
* '''znajomego [[informatyk|informatyka]]''' – przyda się, kiedy nam się uda zepsuć sprzęt lub system padnie dzięki naszym umiejętnościom programowania.
* '''[[pieniądze|pieniędzy]]''' – przydają się na honorarium dla znajomego informatyka, kiedy braknie nam świętej cierpliwości.


== Zastosowanie ==
==Początki nauki C++==
C++ jest uznawane za świetny język dla [[Alfonsi|alfonsów]], gdyż posiada (w najnowszym standardzie) zestaw seksownych funkcji. Oto część z nich:
Koniecznie trzeba wtedy napisać program, który wyświetli nam w konsoli/terminalu napis ''Hello, world'' (opcjonalnie ''Spieprzaj, dziadu''). Oto jego [[kod źródłowy]] wraz z komentarzami:
* <code>stoi</code> – funkcja wywołująca stanie;
#include <iostream> /*dołącza bibliotekę iostream. Nikt nie wie, do czego to właściwie służy
* <code>string</code> – klasa do manipulacji stringami;
Ilość osób, która wie, do czego to służy jest liczbą ujemną.*/
* <code>wstring</code> – klasa do manipulacji szerokimi stringami (wide string);
using namespace std; // prawdopodobnie służy to temu, byśmy mogli napisać program ''łatwo''<br>
* <code>to_string</code> – zaglądanie w stringi;
int main() // to jest funkcja główna, czyli taki worek na wszystko.
* <code>to_wstring</code> – zaglądanie w szerokie stringi;
{
* <code>sprintf</code> – funkcja do ekspresowej kopulacji (najczęściej używana razem ze stoi).
cout << "Hello world"; /* oto standardowy strumień wyjścia. Zapamiętaj tę nazwę i formułę!<br>
W cudzysłowie można napisać co się chce, w tym wspomniane wcześniej ''spieprzaj dziadu''.*/
cin.get(); // to jest po to, by program w windowsowskiej konsoli się wyświetlił, a nie mignął.
return 0; // Program zwraca takie samo zero, jakim sam jest od początku.
}


== Nowości ==
Jak widać, choćby nie wiadomo, jak się człowiek starał, kod zawsze będzie zupełnie nieczytelny.<br>
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.
A oto program istoty grajacej w tibie [[kod źródłowy]]:

#include<iostream><br>
=== Przeładowanie operatorów ===
using namespace std;<br>
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 main()

{
<syntaxhighlight lang="cpp">
const unsigned long long w=36000000000000000000;//zmienna w ma wart. 36 miliardow miliardow(za duzo zeby napisac slownie).
int operator+(int a, int b) // plus oznacza odejmowanie
double tablica [w];//daje zeby bylo 36 miliardow miliardow zmiennych ok. 260000 pb(1pb=1024tb, 1tb=1024gb) :}.
{
tablica[1]=1;//zabiera z tego 1 zmienna i daje jej wartosc 1
return a-b;
double tablica2[w];//druga liczba
}
tablica2[1]=0;//to samo
int operator-(int a, int b) // minus oznacza dzielenie
double wynik[w];//wynik
{
wynik[1]=tablica2[1]+tablica[1];//oblicza dzialanie 1+1 bo sam nie umie
return a/b;
cout<<wynik[1];
}
system("start c:/tibia");//rozpoczyna fascynujaca gre
int operator/(int a, int b) // slesz powoduje wypisanie "Hello world!"
return 0;
// i zawsze daje wynik 7
/*tibiak nie potrzebuje cin.get bo on to zobaczy tak czy siak bo w tibi przyzwyczjil swe oczy do <br>
{
znikajacych cyferek*/
std::cout << "Hello, world!" << std::endl;
}
return 7;
}
Na koniec program ma ok. 780000 pb.
int main()
jak ktos chce
{
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>

=== 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:

<syntaxhighlight lang="cpp">
#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
</syntaxhighlight>

=== 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):

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

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

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


=== Znane stwierdzenia ===
==Schody==
# Wszystkie znaki prowadzą do main().
Schody w programowaniu C++ zaczynają się szybko, można wyróżnić wiele z nich, m.in.:
# Od zarania dziejów człowiek utrudnia sobie życie. Można porównać słowa C i C++.
* '''funkcje''' – dziwne twory umieszczane po ''dyrektywach preprocesora'' używane później w ''funkcji głównej '''main'''''.
# Każdy człowiek wie, że [[Windows 7]] na [[Delphi]] pisany jest.
* '''tablice''' – przez [[lamer|specjalistów]] zwane fachowo tabelami. Przechowują wiele ''zmiennych tego samego typu''.
# C++ to język obiektowy (i nie tylko), który ma za zadanie dodać nowe wyrażenia do istniejących funkcji.
* '''typy zmiennych''' – w C++ istnieje wiele typów zmiennych, a każda służy do czego innego. Większość osób, które porwały się na naukę tego języka poprzestaje na zmiennej typu ''int'', ale i tak nie wie dokładnie, jaki ma ona zakres. Zaawansowani cepiarze znają typ float, jednak nie da się go opisać w kilku zdaniach, niektóre tysiąc-stronnicowe książki nie potrafią tego dobrze wytłumaczyć.
# Biblioteka. Skąd to się bierze?
* '''pętle''' – jak sama nazwa wskazuje, służy do zapętlania programu, by robił jedno i to samo do pewnego momentu. W praktyce wychodzi często, że do nieskończoności, tzn. aż komputer się zawiesi.
# C sprawia, że łatwo jest sobie strzelić w stopę. Z C++ jest to trudniejsze, ale za to w razie czego odstrzelisz sobie całą nogę.
* '''struktury''' – twory, których nikt nie potrafi stosować, a z założenia zbierają kilka informacji jednocześnie.
# 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!).
* '''tablice struktur''' – połączenie tablic i struktur. Większość nie pojmuje nawet tych pierwszych, toteż nie ma sensu opisywać tego zagadnienia.
* '''Klasy''' – bardziej zaawansowane struktury, w których wszystko jest domyślnie prywatne ( cokolwiek to znaczy )


==Wykorzystanie==
== Zobacz też ==
* [[programowanie obiektowe]]
* Torturowanie uczniów w liceach z poszerzonym programem informatyki.
* [[C (język programowania)]]
* Zabawy w [[hacker|hackera]].
* [[C Sharp|C#]]
* Imponowanie nieoświeconym osobom płci żeńskiej umiejętnością programowania (u mężczyzn).
* [[CCC]]
* Odstraszanie nieoświeconych osobników płci męskiej umiejętnością programowania (u kobiet).
* [[CMake]]


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


[[zh:C++]]
[[el:C++]]
[[en:C++]]
[[en:C++]]
[[es:C--]]
[[es:C--]]
[[fr:C++]]
[[fr:C++]]
[[nn:C++]]
[[ja:C++]]
[[pt:C++]]
[[pt:C++]]
[[ru:Си плюс минус]]
[[ru:Си плюс минус]]
[[zh-tw:C++]]

Aktualna wersja na dzień 19:06, 30 kwi 2022

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[edytuj • edytuj kod]

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;
  • sprintf – funkcja do ekspresowej kopulacji (najczęściej używana razem ze stoi).

Nowości[edytuj • edytuj kod]

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[edytuj • edytuj kod]

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[edytuj • edytuj kod]

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[edytuj • edytuj kod]

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[edytuj • edytuj kod]

  1. Wszystkie znaki prowadzą do main().
  2. Od zarania dziejów człowiek utrudnia sobie życie. Można porównać słowa C i C++.
  3. Każdy człowiek wie, że Windows 7 na Delphi pisany jest.
  4. C++ to język obiektowy (i nie tylko), który ma za zadanie dodać nowe wyrażenia do istniejących funkcji.
  5. Biblioteka. Skąd to się bierze?
  6. C sprawia, że łatwo jest sobie strzelić w stopę. Z C++ jest to trudniejsze, ale za to w razie czego odstrzelisz sobie całą nogę.
  7. 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ż[edytuj • edytuj kod]