C++: Różnice pomiędzy wersjami
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>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; |
|||
} |
} |
||
int operator-(int a, int b) // minus oznacza dzielenie |
int operator-(int a, int b) // minus oznacza dzielenie |
||
{ |
{ |
||
return a/b; |
|||
} |
} |
||
int operator/(int a, int b) // slesz powoduje wypisanie |
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 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” |
|||
} |
} |
||
</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)); |
|||
} |
} |
||
</source> |
</source> |
Wersja z 01:31, 25 paź 2016
Uwaga! Jest po północy! Programisto! Czy wiesz gdzie wskazuje teraz Twój wskaźnik? |
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 staniestring
– Klasa do manipulacji stringamiwstring
– Klasa do manipulacji szerokimi stringami (wide string)to_string
– Zaglądanie w stringito_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
- 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ę.