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

Z Nonsensopedii, polskiej encyklopedii humoru
M (Wycofano ostatnie edycje autorstwa 91.65.95.172; przywrócono ostatnią wersję autorstwa Ten login jest już zajęty..)
M (bot wprowadza drobne poprawki)
Znacznik: przez API
Linia 1: Linia 1:
{{Programisto}}
{{Programisto}}
<br>
<br />
{{Programowanie}}
{{Programowanie}}


Linia 11: Linia 11:
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
* <code>string</code> – Klasa do manipulacji stringami
* <code>string</code> – Klasa do manipulacji stringami
* <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
Linia 17: Linia 17:


Wersja od M$ najbardziej słynie z błędów kompilacji wbudowanych bibliotek. Zdarzają się również błędy typu:
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>
<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.
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.


Linia 34: Linia 34:
int operator+(int a, int b) // plus oznacza odejmowanie
int operator+(int a, int b) // plus oznacza odejmowanie
{
{
return a-b;
return a-b;
}
}
int operator-(int a, int b) // minus oznacza dzielenie
int operator-(int a, int b) // minus oznacza dzielenie
{
{
return a/b;
return a/b;
}
}
int operator/(int a, int b) // slesz powoduje wypisanie "Hello world!"
int operator/(int a, int b) // slesz powoduje wypisanie „Hello world!
// i zawsze daje wynik 7
// i zawsze daje wynik 7
{
{
std::cout << "Hello, world!" << std::endl;
std::cout << „Hello, world! << std::endl;
return 7;
return 7;
}
}
int main()
int main()
{
{
int a,b,c;
int a,b,c;
// przypisujemy liczbom "a" i "b" wartosć "2"
// przypisujemy liczbom „a” i „b” wartosć „2”
a=2;
a=2;
b=2;
b=2;
// przypisujemy liczbie "c" wartosć "a+b"
// przypisujemy liczbie „c” wartosć „a+b”
c=a+b;
c=a+b;
// wypisujemy wartosć "c" na ekran
// wypisujemy wartosć „c” na ekran
std::cout << c << std::endl;
std::cout << c << std::endl;
// jak łatwo się domyslić, program wypisuje "0"
// jak łatwo się domyslić, program wypisuje „0”
}
}
</source>
</source>
Linia 65: Linia 65:


<source lang="cpp">
<source lang="cpp">
#define true false
# define true false
#define public private
# define public private
#define p -
# define p -
#define m +
# define m +
#define l p 1 m 1 p
# define l p 1 m 1 p
#define h l 1 m 1 p 1 m 1 l
# 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
# 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>
</source>
Linia 81: Linia 81:


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


Linia 90: Linia 90:
typ min(typ a, typ b)
typ min(typ a, typ b)
{
{
return ((a) > (b) ? (b) : (a));
return ((a) > (b) ? (b) : (a));
}
}
</source>
</source>

Wersja z 01:31, 25 paź 2016


Ten artykuł jest częścią cyklu naukowego języki komputerowe.

Języki programowania:


Inne języki komputerowe:


edytuj ten szablon
long long ago; // in a galaxy far far away
C++ o Gwiezdnych wojnach
long long ago;
int a; //galaxy
for(int i=away;away<1;away++)
Udoskonalona wersja powyższego kodu

C++ (z ang. Si Plask Plask) – ezoteryczny, wieloparadygmatowy, wielofunkcyjny, uniwersalny, obiektowy, generyczny, niskopoziomowy, bezsensowny język programowania będący dla C tym, czym jest Nonsensopedia dla Wikipedii (albo na odwrót).

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

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 tworząc język bardziej pożytecznym.

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.

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

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.

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));
}

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

Znane stwierdzenia

  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ę.