Strona główna » Liceum » Przedmioty ścisłe » Informatyka


C++ - wykład 6



Poprzednia praca: C++ - wykład 7
Następna praca: C++ - wykład 3



Treść: Wykład 6 - 3 godz
Zakres tematyczny
1. Instrukcja typedef
2. struktury, unie, pola bitowe.
3. Jeszcze raz o funkcjach:
- funkcje ze zmienną liczbą parametrów
- przeładowanie nazw funkcji
- rekurencja
1. Instrukcja typedef
W języku C wprowadzono mechanizm zwany typedef, do tworzenia nowych nazw typów danych. Np. deklaracja :
typedef int length;
tworzy dla typu int synonim lenght. Z tego typu można korzystać w deklaracjach, rzutowaniu itp., tak samo jak z int:
lenght dl, maxdl;
lenght *dl[];
Deklaracja typedef w rzadnym wypadku nie tworzy nowego typu, nadaje po prostu inną nazwę dla istniejacego już typu. Za używaniem typedef przemawiają dwa względy:
- parametryzacja w związku z problemem przenośności. Jeśli deklarację typedef stosujemy dla typów zależnych od maszyny, to tylko te deklaracje będą musiały być zmienione przy przenoszeniu programów
- deklaraja lepiej komentuje program. Analiza jego jest znacznie prostsza.
Typ który określamy w deklaracji typedef nie musi być podstawowy, może to być dowolny typ pochodny:
typedef int *wsk_int
Deklaracja typedef nie redefiniuje nazw już istniejących.
2.Inne pochodne typy zmiennych
Należą do nich :
struktury
unie
pola bitowe
Struktury
W klasycznym C struktura była traktowana jako obiekt złożony z kilku lub jednej zmiennej, dla wygody zgrupowanych pod jedną nazwą. Struktury ułatwiają zorganizowanie skomplikowanych danych, ponieważ grupę związanych ze sobą zmiennych (nawet różnych typów) pozwalają traktować jako jeden obiekt, a nie zestaw oddzielnych danych. Typowym przykładem takiej struktury może być np. lista płac. Pracownik opisany jest przez kilka zmiennych: imię, nazwisko, adres, wynagrodzenie itp.
Język C++ poszedł dalej w definiowaniu struktur, i wzbogacił je o możliwość przechowywania tzw. funkcji składowych tzn. funkcji operujących na skladowych struktury. Stąd już tylko krok do definiowania klas. Można nawet powiedzieć, że w pojęciu języka C++ zarówno struktury jak i unie są typami "klasowymi", czyli typu class. Ale o tym pomówimy w przyszłym semestrze. Na tym wykładzie omówimy struktury w starym stylu, natomiast po omówieniu klas powrócimy do struktur w nowym ujęciu.
Deklarację stuktury rozpoczyna słowo kluczowe struct. Podajmy przykład struktury odpowiedniej dla grafiki. Punkt opisują dwie współrzędne, zadeklarowane jako składowe struktury:
struct point
{
int x;
int x;
}
Po słowie struct występuje nazwa struktury (point) zwana etykietą struktury. Nazwy zmiennych występujących w strukturze nazywamy składowymi struktury.
Obiekt typu struktura wymaga tyle pamięci do zapisu, ile wynosi suma pamięci koniecznej do zapisu poszczególnych składowych struktury.
Składowa struktury, normalna zmienna, etykieta mogą mieć te same nazwy bez obawy o konflikt. Deklaracja struct jest definicją nowego typu złożonego.
Po prawej klamrze zamykającej listę zmiennych może występować lista zmiennych, tak jak po każdym podstawowym typie. Zatem definicja:
struct {...} x,y,z
odpowiada składniowo definicji:
int x,y,z;
Deklaracja struktury, która nie zawiera listy zmiennych nie rezerwuje pamięci, jedynie opisuje wzorzec struktury. Mając deklarację struktury można używać jej do deklaracji zmiennych typu struktura np.:
struct point punkt;//równoważne point punkt;
deklaruje zmienną punkt będącą strukturą typu point.
Strukturę można zainicjować dopisując na końcu jej definicji listę wartości początkowych jej składowych np:
struct point maxpoint = {320,200};
W wyrażeniach dostęp do konkretnej składowej struktury umożliwia konstrukcja:
nazwa_struktury.składowa
dla zmiennej strukturalnej punkt owdołania są nastepujące:
a = punkt.x;
b = punkt.y;
Język C umożliwia konstruowanie struktur zagnieżdżonych:
struct rect{
struct point p1;
struct point p2;
}
W takich strukturach dostęp do składowych podstawowych wykonuje się przy pomocy operacji:
struct rect ekran;
a1 = ekran.p1.x
b1 = ekran.p1.y;
Podobnie jak w przypadku zmiennych podstawowych, możemy posługiwać się tablicami struktur. Jest to często spotykane przy tworzeniu rekordów, które mają być zapisane do pliku. Można więc stworzyć tablicę struktur rect:
struct rect{
struct point p1;
struct point p2;
} okno[5];
Każdy element tablicy jest strukturą. Powyższy zapis można zapisać inaczej:
struct rect okno[5];
Inicjowanie tablicy struktur przeprowadza się podobnie jak dla pojedynczych struktur, po definicji podaje się ujętą w nawiasy klamrowe listę wartości początkowych:
struct point {
int x;
int y;
} punkt[ ] = {
0,0,
1,1,
1.5,
16,8 }
Precyzyjniej byłoby ująć wszystkie elementy wierszy tablicy w nawias {}np.:
{1,2},
{1.4},
{1,5},
........
ale gdy podano wszystkie wartości i gdy wartościami są proste stałe lub napisy, wówczas wewnętrzne nawiasy można pominąć. Jak w przypadku normalnych tablic, gdy pominięto wymiar i podano listę wartości początkowych, to liczba elementów tablic struktur zostaje wyliczona automatycznie.
Podczas omawiania wskaźników powiedzieliśmy, że można je tworzyć do większości typów podstawowych i pochodnych (złożonych). Pora wię teraz na omówienie wskaźników do struktur. Są one tak powszchne, że do języka włączono specjalny operator (strzałkę), mający postać: ->. Użycie tego operatora przedstawimy na przykładzie struktury dane:
struct dane{
int klucz;
int tabllica[200];
}dane_dos
Deklarujemy wskażnik wsk_str do zmiennej dane_dos:
struct dane *dane_dos;
inicjujemy go zmienna dane_dos:
wsk_str = &dane_dos;
Od tego czasu do pól struktury można odwoływać sie poprzez wskaźnik w następujący sposób:
wsk_str->klucz = 1; // ekwiwalent dane_dos .klucz = 1;
Zwróćmy uwagę, że nie stosujemy * do odwoływania się do wartości elementu składowego struktury wskazanej przez wskaźnik wsk_str. Powodem wprowadzenia operatora -> do obsługi stuktur jest fakt, że przez operatory * i & nie uzyskamy dostępu do poszczególnych elementów struktury.Nie ma więc czegoś takiego jak:
*wsk_str.klucz;
Unie
Unia jest zmienną, która w różnych momentach może przechowywać w tym samym miejscu pamięci obiekty różnych typów. Obiekty typu unia wymagają do zapisu tyle bajtów pamięci ile wynosi liczba bajtów potrzebna na przechowanie najdłuższego elementu uni. Deklaracja unii podobna jest do deklaracji struktury, tyle tylko, że dokonuje się jej przy pomocy słowa kluczowego union. Operacje dozwolone na strukturach są dozwolone na uniach : kopiowanie i przypisywanie unii traktowanych jako całość, pobieranie adresu, dostęp do ich składowych. Sposób deklaracji i operowania uniami przedstawimy na przykładzie:
#include
#include
#include
union NumericType//deklaracj auni mogącej przechowywać:
{
intiValue;//wartość typu int
longlValue;//wartość typu long
doubledValues;//wartość typu double
};
int main(int argc, char *argv[])
{
NumericType *Values = new NumericType[argc-1];
for(int i =1; i INT_MAX)//jeśli dana jest większa niż największy
Values[i].lValues = atol(argv[i]);//int to zapisz ją w lValues
elsejeśli nie to w iValues
Values[i].ivalue = atoi(argv[i]);
}
return 0;
}
Przykładowa unia NumericType jest rozmieszczona w pamięci jak przedstawiono na rysunku

Należy pamiętać o tym, aby do przypisywania składników unii zadeklarować taką zmienną, która będzie mogła przechować najdłuższą składowa unii.
Do skladowej uni można się odwoływac także poprzez wskaźnik podobnie jak i w strukturze:
wskaźnik_do_unii -> skladowa.
Unię można zainicjować podobnie jak innej zmienne, należy jednak pamiętać , że można to zrobic jedynie wartością o typie jej pierwszej składowej np.:
NumericType values = 5;//Ok
NumericType values = 14578.9//Bład - pierwszym elementem unii jest int
Można definiować tzw. unie anomimowe tj. takie które same nie mają nazwy, jak też nie ma nazwy jedyny egzemplarz tej unii. Do składników tej unii odwołujemy się po prostu poprzez nazwę składnika bez operatora '.' np.:
union {
int a;
float b;
char c;
};
int a; //Bład redefinicja zmiennej a co wynika z anonomowosci unii
a = 4; cout> n;
res = silnia(n);
cout...


Widzisz tylko część pracy, aby zobaczyć całość, musisz się zalogować.

Nie masz jeszcze u Nas konta? Na co czekasz? ZAREJESTRUJ SIĘ JUŻ TERAZ

Zapomniałeś hasła? Skorzystaj z formularza przypominającego hasło.


Czytano: 1706 , autor: ew.la , Ocena: 32.7

      Blip Śledzik Twitter Facebook Buzz Wykop

Inne podobne teksty do tytułu C++ - wykład 6

C++ - wykład 8
C++ - wykład 7
C++ - wykład 3
C++ - wykład 1
C++ - wykład 2/4
C++ - wykład 4/4
C++ - wykład 3/4
C++ - wykład 4/4 cd.
Tablice w jezyku C++


Losowe teksty z tej samej kategorii

Historia komputerów
Grafika Komputerowa
Skróty klawiszowe
Rola internetu w mediach
Standardy zapisywania dźwięku
Opis środowiska Windows XP. (1)
Przesyłanie danych
Systemy operacyjne (2)
Praca z komputerem to między innymi zapis informacji. (2)
Ochrona danych.


Wasze komentarze

Brak komentarzy dla danej pracy.




Zmień kategorię:

Zobacz także:

Przedmioty ścisłe
Chemia Chemia
Fizyka Fizyka
Informatyka Informatyka
Matematyka Matematyka

A A A A - zmień wielkość czcionki


Oceń pracę:

Ocena pracy wynosi 32.7.

Informacje o pracy:

⇒Dodano: 2008-02-11 21:04:15
⇒Czytano: 1706
Autor: ew.la


Dodatkowe opcje:

Drukuj stronę
ZGŁOŚ NARUSZENIE
Wyślij znajomemu
Dodaj do ULUBIONYCH



Dodaj komentarz:

Tytuł:

Treść: