- Stahuj zápisky z přednášek a ostatní studijní materiály
- Zapisuj si jen kvalitní vyučující (obsáhlá databáze referencí)
- Nastav si své předměty a buď stále v obraze
- Zapoj se svojí aktivitou do soutěže o ceny
- Založ si svůj profil, aby tě tví spolužáci mohli najít
- Najdi své přátele podle místa kde bydlíš nebo školy kterou studuješ
- Diskutuj ve skupinách o tématech, které tě zajímají
Studijní materiály
Hromadně přidat materiály
Programovací jazyk C++ Jiří Vogel
2012033ZAPG - Základy algoritmizace a programování
Hodnocení materiálu:
Zjednodušená ukázka:
Stáhnout celý tento materiálna typ
Příklady a význam některých pouľívaných konverzí:
(double) float_výraz převod celého čísla na jeho znakový ekvivalent převod znaku na jeho celočíselný ekvivalent (char) int_výraz převod celého čísla na jeho znakový ekvivalent (int) float_výraz odříznutí desetinné části
(double) int_výraz převod celého čísla na reálné (double) float_výraz zvětąení přesnosti
Přetypování je nutné v různých případech, např. při pouľití ukazatelů (). V původně definovaném jazyku C (viz např. [3]), bylo nutné při nesouladu formálních a skutečných parametrů provést přetypování skutečného parametru (tak je tomu ostatně ve větąině programovacích jazyků). Tedy např.
//...
int i; double d;
//...
d=exp((double)i);
//...
V jazyku C++ to není nutné, protoľe jsou zavedeny povinné prototypy, ale přesto je vhodné přetypování uvést, protoľe zpřehledňuje program. V jazyku C++ se více neľ přetypování pouľívá tzv. explicitní typová konverze. Spíąe neľ dříve uvedený zápis píąeme v C++:
//...
int i; double d;
//...
d=exp(double(i)); // double (i) je explicitni typova konverze
//...
nemáme-li ovąem odvahu napsat
//...
int i; double d;
//...
d=exp(i);
//...
3.1 Priority operací
Závěrem této kapitoly si uvedeme priority operací. Uvedeme vąechny operátory s tím, ľe nám jeątě neznámé probereme později. Tabulka priorit operací pro jazyk C++:
Operátor
::
() [ ] -> . sizeof
! ~ ++ -- + - ( typ) * & new delete
* / %
+ -
>
< = >
= = ! =
&
^
&&
? :
= + = - = * = / = % = >>= b) max=a; else max=b;
i kdyľ středník před slovním symbolem else je v programovacích jazycích obvykle chybný.
Sloľené závorky se pouľívají pro sdruľení příkazů v tzv. sloľený příkaz, který jsme jiľ mnohokrát pouľili. Jsou-li ve sloľeném příkazu uvedeny definice proměnných, jedná se o tzv. blok. Bloky mohou být do sebe vřazeny.
Příklad 3.1. Sestavme ąkolní program, kterým si osvětlíme princip blokové struktury.
Řeąení:
#include
main()
{
int a,b,c; // Lokalizovane promenne v programu
a=10;
b1:{int i,j; // Lokalizovane promenne v bloku b1
i=j=5;
c=i*j*a;
printf("Tisk v b1: c = %3d\n",c);
}
b=c*a;
b2:{float b,c,d; // Lokalizovane promenne v bloku b2
d=c=2.5;
b=c+4;
b3:{int p; // Lokalizovana promenna v bloku b3
p=5; d=p+b;
b=10*p+b;
printf("Tisk v b3: d = %4.1f b = %4.1f\n",d,b);
}
a=100+a; printf("Tisk v b2: a = %3d\n",a);
}
printf("Tisk v programu: a = %3d b = %4d c = %3d\n",a,b,c);
}
Bloky b1, b2, b3 jsou podřazené hlavnímu programu. Hlavní program a blok b2 jsou nadřazené bloku b3.
Definice, které jsou v bloku uvedeny, platí pouze uvnitř tohoto bloku. Vně bloku můľe být kaľdý z definovaných identifikátorů uľíván pro jiné účely. Tak kaľdý blok zavádí novou úroveň označování. Kaľdý identifikátor, který je v bloku definován, je v něm lokální, tj. má tyto vlastnosti:
Objekt označený tímto identifikátorem v bloku neexistuje vně tohoto bloku.
Kaľdý objekt označený tímto identifikátorem vně bloku je uvnitř tohoto bloku zcela nepřístupný.
V příkladu 3.1 jsou automatické proměnné a, b, c z hlavního programu přístupné v bloku b1. V bloku b2 a b3 je přístupná pouze proměnná a, protoľe identifikátory b, c jsou uľity jinak. Proměnné i, j z bloku b1 jsou přístupné jen v tomto bloku a po jeho ukončení jejich hodnoty přestávají být definovány. Proměnné b, c, d definované v b2 jsou přístupné i v bloku b3 a přestávají být definovány po ukončení bloku b2. Pro pečlivého čtenáře je třeba uvést, ľe v příkladu 3.1 se budou tisknout postupně hodnoty: Tisk v b1: c = 250 Tisk v b3: d = 11.5 b = 56.5 Tisk v b2: a = 110 Tisk v programu: a = 110 b = 2500 c = 250 Za koncovými sloľenými závorkami sloľených příkazů a bloků se nemusí dělat středníky.
Závěrem tohoto odstavce se letmo zmíníme o tom, ľe definice a deklarace nemusí být umístěny na začátku programové jednotky nebo bloku, ale mohou být zapsány na kterémkoli místě před prvým pouľitím definovaného nebo deklarovaného objektu. Původně definovaný jazyk C toto zakazoval (viz např. [3]).
2. Operátor ::
Operátor :: se v jazyku C++ uľívá k řeąení konfliktů v přístupových právech k objektům. Máme-li např. automatickou (lokální) proměnnou vekt_sum v nějaké funkci a potřebujeme-li uľít externí (globální) proměnnou, která se jmenuje téľ vekt_sum, zapíąeme: ::vekt_sum, čímľ jsme programu umoľnili tuto externí proměnnou pouľít.
Napíąeme-li např. program z příkladu 3.1 takto:
#include
int c; // Externi promenna
main()
{
int a,b,c; // Lokalizovane promenne v programu
a=10;
::c=1000; // Pracuje se s externi promennou
b1:{int i,j; // Lokalizovane promenne v bloku b1
i=j=5;
c=i*j*a; // Pracuje se s automatickou promennou
printf("Tisk v b1: c = %3d\n",c);
}
b=c*a;
b2:{float b,c,d; // Lokalizovane promenne v bloku b2
d=c=2.5;
b= c+4;
b3:{int p; // Lokalizovana promenna v bloku b3
p=5; d=p+b;
b=10*p+b;
printf("Tisk v b3: d = %4.1f b = %4.1f\n",d,b);
printf("Tisk zdanlive nepristupne promenne c = %d\n",::c);
}
a=100+a; printf("Tisk v b2: a = %3d\n",a);
}
printf("Tisk v programu: a = %3d b = %4d c = %3d\n",a,b,c);
}
bude se v bloku tisknout: Tisk v b1: c = 250 Tisk v b3: d = 11.5 b = 56.5 Tisk zdanlive nepristupne promenne c = 1000 Tisk v b2: a = 110 Tisk v programu: a = 110 b = 2500 c = 250 Je nutno upozornit, ľe operátorem :: lze zpřístupnit jen globální proměnné, které jsou externí a statické ( ), nikoliv automatické proměnné, které jsou globální z hlediska blokové struktury. Nedůvěřivý čtenář se můľe v původním programu z příkladu 3.1 pokusit zpřístupnit proměnnou c ze záhlaví hlavního programu v bloku b3. Uvidí, ľe neuspěje. Toto nebývá v učebnicích jazyka C++ přílią zdůrazňováno.
Operátor :: se uľívá i ve spojitosti s tzv. třídami ( ).
3. Operátor čárka
Dvojice výrazů oddělených čárkou se vyhodnocuje zleva doprava a výsledek má hodnotu pravého operandu. Čárky mezi parametry nemají význam operátoru.
Příklad 3.2. Sestavme funkci pro obracení řetězce znaků.
Řeąení:
// Funkce obrati retezec: tedy napr. "abcd" zmeni na "dcba"
void obrret(char s[])
{
int c,i,j;
for(i=0,j=strlen(s)-1;i0)
{
while(--n > 0)
if (radka[n] != ' ' && radka[n] != '\t' && radka[n] != '\n')
break;
radka[n+1]='\0';
cout presun(5);
// Stiskni enter a popotahuj kruznici o 30 obrazovych prvku
ukruznice->presun(30);
// Stiskni enter a zvetsi kruznici na o 50 obrazovych prvku
ukruznice->expanduj(50);
k=getch();
// Stiskni enter a zmensi kruznici 95 obrazovych prvku
ukruznice->zmensi(95);
k=getch();
// Nasleduje prikaz, ukoncujici v implementaci BORLAND graficky rezim
closegraph();return(0);
}
3. Spřátelené funkce a třídy
Zapouzdření zajią»uje, ľe data typu private nejsou přístupná jiným objektům. To má velké výhody při úpravách programových projektů a jejich údrľbě, klade to vąak velké nároky na projektanta, od kterého se očekává, ľe zajistí dostatečný počet metod pro manipulaci s daty při vąech alternativách, které se mohou vyskytnout. To se někdy nemusí podařit, a proto v C++ existuje mechanismus "přátel". Přátelé (tedy spřátelené funkce a třídy) mají přístup ke vąem datům, právě tak, jako metody přísluąné třídy. Můľeme si to představit tak, ľe se do ątítu, kterým kaľdá třída chrání svá data, navrtají otvory, kterými jsou data přístupná "přátelům". Nebudeme zde rozebírat výhody a nevýhody těchto ötvorů", citem vąak kaľdý pozná, ľe (např. pro údrľbu systému) čím méně otvorů a "přátel" bude, tím lépe.
Spřátelelené funkce a třídy se vyuľijí obvykle ve sloľitých projektech, které se vymykají této publikaci. Abychom vąak nezůstali jen u planého popisu, sestavíme dva ąkolní příklady, které sice nejsou přílią duchaplné, ale techniku pouľití "přátel" snad dostatečně osvětlí.
Příklad 6.4. Sestavme program, ve kterém třída zvec disponuje metodou, která zvětąí privátní údaj třídy o j
Vloženo: 25.04.2009
Velikost: 534,00 kB
Komentáře
Tento materiál neobsahuje žádné komentáře.
Copyright 2024 unium.cz