CLAB 11 2010-2011, Automatyka i Robotyka, Język programowania


Temat: Reguły zasięgu, zasłanianie nazw, obszary nazw

Cel ćwiczenia:

Nowe zagadnienia:

Definicje nowych pojęć:

Zakres ważności nazwy obiektu - to ta część programu, w której nazwa jest znana kompilatorowi.

Czas życia obiektu - to okres od momentu, gdy zostaje on zdefiniowany (definicja przydziela mu miejsce w pamięci) - do momentu, gdy przestaje on istnieć (jego miejsce w pamięci zostaje zwolnione).

Jaka jest różnica?

Różnica między powyższymi pojęciami jest taka, że w jakimś momencie obiekt może istnieć, ale nie być dostępny. To dlatego, że np. znajdujemy się chwilowo poza zakresem ważności jego nazwy.

Zasięg pliku - identyfikator jest dostępny we wszystkich funkcjach od miejsca, w którym został zadeklarowany, aż do końca pliku.

Przykład: wszystkie zmienne globalne, definicje funkcji i jej prototypy umieszczone poza funkcją.

Zasięg funkcji - jedynymi identyfikatorami mającymi zasięg funkcji są etykiety. Etykiety mogą być używane gdziekolwiek w funkcji, w której się pojawiają, ale nie są dostępne spoza ciała tej funkcji

Przykład: etykiety w strukturach switch (jako etykiety case) i etykiety w wyrażeniach goto.

Zasięg prototypu funkcji - jedynymi identyfikatorami mającymi zasięg prototypu funkcji są identyfikatory użyte na jej liście parametrów. Prototypy funkcji nie wymagają nazw na liście parametrów - wymagane są tylko typy.

Zasięg bloku - identyfikatory zadeklarowane wewnątrz bloku. Zasięg bloku rozpoczyna się w miejscu deklaracji identyfikatora i kończy w momencie napotkania prawego nawiasu klamrowego }.

Przykład: zmienne lokalne w funkcji, parametry funkcji, dowolne zmienne w bloku {}, itp.

Zasięg klasy - omówiony zostanie podczas omawiania klas.

ZALECENIE: Staraj się unikać korzystania z takich samych nazw identyfikatorów (zmiennych)

w programie!!! (problemy z „zasłanianiem” nazw)

#include <iostream>

using namespace std;

int x=1; //definicja zmiennej globalnej

int main()

{

cout<<x<<endl;

{ //otwarcie bloku lokalnego

int x=2; //definicja zmiennej lokalnej

ekran

0x08 graphic
cout<<x<<endl; //zmienna lokalna zasłania globalną

cout<<::x<<endl; //tylko dla zasłoniętego obiektu globalnego

} //zamknięcie bloku

cout<<”Poza blokiem, ”<<x<<endl;

system(„PAUSE”);

return 0;

}

Obszary nazw (relatywnie nowa cecha C++) są przeznaczone dla programistów do pomocy w rozwijaniu nowych elementów programu bez wywoływania konfliktów nazw z istniejącymi elementami oprogramowania.

Każdy plik nagłówkowy w projekcie standardu C++ używa obszaru nazw nazywanego std. Projektanci nie powinni używać obszaru std do definiowania nowych bibliotek klas.

Instrukcja using namespace std mówi nam, że używamy elementów oprogramowania z biblioteki standardowej C++.

Instrukcja using umożliwia nam używanie krótkich wersji każdej nazwy w bibliotece standardowej C++ lub jakimkolwiek, określonym przez programistę obszarze nazw namespace.

Jeżeli używamy dwóch lub więcej bibliotek klas, które mają opisy z identycznymi nazwami, może wystąpić konflikt nazw. Należy wtedy w pełni określić nazwę, jakiej chcemy użyć z jej obszarem nazw za pomocą

operatora rozróżniania zasięgu ::.

#include <iostream>

namespace student1

{

int x=1;

int x1=1;

}

namespace student2

{

int x=2;

int x2=2;

}

using namespace std;

using namespace student1;

using namespace student2;

int main()

{

cout<<student1::x<<endl; ekran

0x08 graphic
cout<<student2::x<<endl;

cout<<x1<<endl;

cout<<x2<<endl;

system (“PAUSE”);

return 0;

}

Zadania C++ - 11

1. Zdefiniuj cztery stałe tekstowe (stringi) o takiej samej nazwie, w następujących czterech różnych zakresach:

a) w dowolnym wymyślonym przez Ciebie obszarze nazw,

b) w zakresie globalnym (zakres pliku),

c) w zakresie lokalnym funkcji głównej programu (main),

d) w dowolnym lokalnym zakresie bloku,

a następnie wyświetl wszystkie napisy na ekran wewnątrz lokalnego zakresu bloku (punkt d). Treść napisu powinna charakteryzować zasięg, w którym napis został zdefiniowany, np.:

”To jest napis zdefiniowany w zakresie ... ”

2. Napisz program, w którym definiujesz dwa obszary nazw student1 i student2. W obszarach tych zdefiniuj następujące dane dotyczące dwóch studentów, tj.Twoje w obszarze student1 , a sąsiada w obszarze student2:

imię, nazwisko, wiek, nr_komputera, przy którym dana osoba siedzi. Wyświetl te informacje na ekran.

3. Napisz program, w którym definiujesz dwa obszary nazw tab_int i tab_char. Zdefiniuj w tych obszarach dwie 10-elementowe tablice, odpowiednio liczb całkowitych oraz znakową (z pojedynczymi znakami), dowolnie przez Ciebie zainicjalizowane. W głównej funkcji programu napisz procedurę realizującą wyszukiwanie największego i najmniejszego elementu w tych tablicach.

Ćwiczenia laboratoryjne nr 11

„Język programowania” str.1

1

2

1

Poza blokiem, 1

Naciśnij dowolny ..

1

2

1

2

Naciśnij dowolny kk



Wyszukiwarka

Podobne podstrony:
CLAB 12 2010-2011, Automatyka i Robotyka, Język programowania
CLAB 10 2010-2011, Automatyka i Robotyka, Język programowania
CLAB 1 2010-2011, Automatyka i Robotyka, Język programowania
CLAB 5 2010-2011, Automatyka i Robotyka, Język programowania
CLAB 1 2010-2011, Automatyka i Robotyka, Język programowania
Zestaw C++-zaliczenie wcześniejsze 2010-2011, Automatyka i Robotyka, Język programowania
CLAB 10 2010-2011 prosty, Automatyka i Robotyka, Język programowania
CLAB 10 2010-2011 folia, Automatyka i Robotyka, Język programowania
REGULAMIN KORZYSTANIA Z LABORATORIUM KOMPUTEROWEGO, Automatyka i Robotyka, Język programowania
Dodatek 2010 2011, Automatyka i Robotyka, SEMESTR 5, NEMAR, Nemar stary, nemar, nemar DUŻO, nemar la
powt, Automatyka i Robotyka, Język programowania
CLAB 2 2009-2010, Tematy ćwiczeń laboratoryjnych z Języka Programowania

więcej podobnych podstron