C++/Przestrzenie nazw: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m Wycofano edycje użytkownika 178.42.72.21 (dyskusja). Autor przywróconej wersji to Piotr Całus. |
m poprawki opisu, konwencje |
||
Linia 1:
Jeśli użyjemy dowolnej wyszukiwarki internetowej, to powinniśmy bez problemu znaleźć prosty, szablonowy kod napisany w C++, który wyświetla napis „Hello World!”, w tłumaczeniu na polski „Witaj Świecie!”. Spójrzmy na niego:
<source lang="cpp">
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!" << endl;
Linia 14:
<div style="width: 80%; background-color: #f2fff2; border: solid 1px #bfffbf; padding: 1em; margin: 15px auto;">
[[Grafika:Crystal_ktip.png|left|40px]]
Zaleca się używanie znaku nowej linii (\n) zamiast manipulatora wyjścia "endl". Chyba że jest to uzasadnione: endl
</div>
Osoby, które już znają C, na pewno się domyślą, co mniej więcej się dzieje w tym kodzie. Najpierw, pokrótce omówimy, co ten program właściwie robi.
Za pomocą <tt>#include <iostream></tt> dołączyliśmy
{{infobox|'''C a C++:'' W C++ pusta lista argumentów funkcji nie oznacza zmiennej listy argumentów, lecz pustą. Aby użyć zmiennej listy argumentów, należy wpisać w listę wielokropek: (...)}}
Za pomocą <tt> return 0 </tt> informujemy system, że program
== Przestrzenie nazw ==
Podczas pracy nad dużymi projektami, w których używa się wielu bibliotek z licznymi deklaracjami, możemy w końcu natknąć się na problem konfliktu nazw, gdy kilka obiektó, typów czy funkcji ma tę samą nazwę. Rozwiązaniem może być np. zamknięcie nazw w "zakresach", w celu oddzielenia ich. Z pomocą przychodzi nam mechanizm ''przestrzeni nazw''.
Spójrzmy jeszcze raz na nasz pierwszy program, tylko w trochę zmienionym wydaniu:
Linia 37 ⟶ 40:
#include <iostream>
int main
{
std::cout << "Hello World!" << std::endl;
Linia 44 ⟶ 47:
</source>
Łatwo zauważyć, że usunęliśmy linię <tt>using namespace std</tt>, kosztem tego, że <tt>cout</tt> i <tt>endl</tt> musieliśmy poprzedzić nazwą <tt>std</tt> i operatorem <tt>::</tt>. Właśnie <tt>std</tt> jest nazwą pewnej przestrzeni nazw. W przestrzeni nazw <tt>std</tt> znajdziemy mnóstwo, a wręcz cały arsenał różnych narzędzi, począwszy od pewnych bardzo przydatnych funkcji, np. sortowania, wyszukiwania, a kończywszy na tak zwanych pojemnikach (kolekcjach), które pozwalają nam w łatwy sposób przechowywać pewne wartości. Oczywiście, aby mieć dostęp do tych narzędzi, musimy dołączyć odpowiedni plik nagłówkowy, używając do tego dyrektywy <tt>#include</tt>.
Pisząc <tt>std::cout <<</tt> informujemy kompilator, że chcemy
Poprzedni przykład pokazał nam, że nie musimy za każdym razem odwoływać się do przestrzeni nazw, kiedy chcemy
Oczywiście nie musimy naraz „przenosić” wszystkiego, co jest w danej przestrzeni nazw, możemy wykorzystać także pewne wybrane elementy. Używamy do tego operacji <tt>using przestrzenNazw::element</tt>. Zobaczmy przykład użycia tej operacji:
Linia 57 ⟶ 60:
using std::endl;
int main
{
std::cout << "Hello World!" << endl;
Linia 77 ⟶ 80:
namespace HelloWorld
{
void hello
{
std::cout << "Hello World!" << std::endl;
Linia 83 ⟶ 86:
}
int main
{
HelloWorld::hello
return 0;
}
Linia 97 ⟶ 100:
namespace Matematyka
{
int dodaj (
{
return a+b;
}
int odejmij (
{
return a-b;
Linia 110 ⟶ 113:
namespace Matematyka
{
int pomnoz (
{
return a*b;
}
int podziel (
{
return a/b;
Linia 131 ⟶ 134:
namespace Matematyka
{
int dodaj (
int odejmij (
}
using namespace std;
int main
{
cout << Matematyka::dodaj (
return 0;
}
Linia 144 ⟶ 148:
namespace Matematyka
{
int dodaj (
{
return a+b;
}
int odejmij (
{
return a-b;
Linia 159 ⟶ 163:
<source lang="cpp">
int Matematyka::dodaj (
{
return a+b;
}
int Matematyka::odejmij (
{
return a-b;
Linia 177 ⟶ 181:
<source lang="cpp">
#include <iostream>
int a, b;▼
int main
{
▲ int a, b;
std::cout << "Podaj dwie liczby a i b" << std::endl;
Linia 208 ⟶ 213:
using std::cin;
using std::endl;
int main ()
{
// wczytujemy imię
cout << "Podaj swoje imie: ";
Linia 217 ⟶ 224:
cin >> email;
informacja = imie + " (" + email + ")"; // suma napisów
cout << "Witaj " << informacja << endl;
informacja += " czyta ten napis";
cout << informacja << endl;
return 0;
Linia 243 ⟶ 250:
#include <string.h>
int main (int argc, char **argv)
{
if (
return -1;
return strcmp (argv[0], argv[1]);
}
</source>
Linia 257 ⟶ 264:
using namespace std;
int main (int argc, char **argv)
{
if (
return -1;
return strcmp( argv[0], argv[1]);
}
</source>
Linia 277 ⟶ 284:
<noinclude>
{{Nawigacja|C++|
[[../
[[../Zmienne/]]|
}}</noinclude>
|