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

Z Nonsensopedii, polskiej encyklopedii humoru
M (-stub)
M
Linia 17: Linia 17:
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.
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.


<source lang="cpp">
<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>
int operator+(int a, int b) // plus oznacza odejmowanie
{
{
<span style="color:#880044;"><b>return</b></span> a-b;
return a-b;
}
}
<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>
int operator-(int a, int b) // minus oznacza dzielenie
{
{
<span style="color:#880044;"><b>return</b></span> a/b;
return a/b;
}
}
<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>
int operator/(int a, int b) // slesz powoduje wypisanie "Hello world!"
<span style="color:#666666;">// i zawsze daje wynik 7</span>
// i zawsze daje wynik 7
{
{
<span style="color:#aa0011;">std::cout</span> << "<b><i>Hello, world!</i></b>" << <span style="color:#aa0011;">std::endl</span>;
std::cout << "Hello, world!" << std::endl;
<span style="color:#880044;"><b>return</b></span> 7;
return 7;
}
}
<span style="color:#440088;"><b>int</b></span> main()
int main()
{
{
<span style="color:#440088;"><b>int</b></span> a,b,c;
int a,b,c;
<span style="color:#666666;">// przypisujemy liczbom "a" i "b" wartosc "2"</span>
// przypisujemy liczbom "a" i "b" wartosc "2"
a=2;
b=2;
a=2;
b=2;
<span style="color:#666666;">// przypisujemy liczbie "c" wartosc "a+b"</span>
// przypisujemy liczbie "c" wartosc "a+b"
c=a+b;
c=a+b;
<span style="color:#666666;">// wypisujemy wartosc "c" na ekran</span>
// wypisujemy wartosc "c" na ekran
<span style="color:#aa0011;">std::cout</span> << c << <span style="color:#aa0011;">std::endl</span>;
std::cout << c << std::endl;
<span style="color:#666666;">// jak latwo sie domyslic, program wypisuje "0"</span>
// jak latwo sie domyslic, program wypisuje "0"
}
}
</source>


=== Instrukcje preprocesora ===
=== Instrukcje preprocesora ===
C++ jak i jego poprzednik zawiera bardzo przydatną, skracającą czas pisania i ułatwiającą zrozumienie języka instrukcję #define.
C++ jak i jego poprzednik zawiera bardzo przydatną, skracającą czas pisania i ułatwiającą zrozumienie języka instrukcję #define.
Przykład zastosowania:
Przykład zastosowania:

<span style="color:#440088;"><b>#define</b></span> p -
<source lang="cpp">
<span style="color:#440088;"><b>#define</b></span> m +
#define p -
<span style="color:#440088;"><b>#define</b></span> l p 1 m 1 p
#define m +
<span style="color:#440088;"><b>#define</b></span> h l 1 m 1 p 1 m 1 l
#define l p 1 m 1 p
<span style="color:#440088;"><b>#define</b></span> g h 1 p 1##*##1##/##1 m 1 h 1 m 1 m 1 h
#define h l 1 m 1 p 1 m 1 l
<span style="color:#666666;">// jak łatwo się domyślić, litera 'g' służy do odejmowania</span>
#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
</source>


=== Szablony ===
=== Szablony ===
Linia 58: Linia 63:


Funkcja „min” w stylu C (makro preprocesora):
Funkcja „min” w stylu C (makro preprocesora):

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


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

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


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

Wersja z 17:18, 18 sty 2013

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, 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

  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?