C++: Różnice pomiędzy wersjami
M |
|||
Linia 86: | Linia 86: | ||
# 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? |
||
# Nie, nie, mój drogi programisto C. Jak nie wpiszesz "return 0" to nie powstanie czarna dziura, która wszystko zniszczy! |
|||
[[Kategoria:Języki programowania]] |
[[Kategoria:Języki programowania]] |
Wersja z 10:05, 12 mar 2013
Ten artykuł jest częścią cyklu naukowego języki komputerowe. |
Języki programowania: |
Inne języki komputerowe: |
|
edytuj ten szablon |
Szablon:Tezoteryczny, 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).
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, 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.
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" wartosc "2"
a=2;
b=2;
// przypisujemy liczbie "c" wartosc "a+b"
c=a+b;
// wypisujemy wartosc "c" na ekran
std::cout << c << std::endl;
// jak latwo sie domyslic, 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 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?
- Nie, nie, mój drogi programisto C. Jak nie wpiszesz "return 0" to nie powstanie czarna dziura, która wszystko zniszczy!