Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




I-OJI PASKAITA: Pradinės pastabos

Lituaniana


I-OJI PASKAITA: Pradinės pastabos



C programavimo kalbos ypatybės

.   &nbs 525j91f p;   &nbs 525j91f p;  Gerai isvystyta auksto lygio programavimo kalba.

.   &nbs 525j91f p;   &nbs 525j91f p;  Dauguma (vos ne visos) komercinės programos parasytos būtent C arba C++ kalba. De facto tai pramoninių programų rasymo standartas

.   &nbs 525j91f p;   &nbs 525j91f p;  Kada atsirado C kalba? 1969 metais isleista C kalbos pirma versija. Sukurta kaip sudėtinė UNIX operacinės sistemos dalis. Vėlesnės UNIX versijos parasytos C kalba

.   &nbs 525j91f p;   &nbs 525j91f p;  Kodėl pavadinta C? Buvo dvi ankstesnės versijos - A ir B, bet jos buvo nevykusios. Is trečio karto pasisekė sukurti pasisekusią programavimo kalbą. Todėl ir pavadinimas C.

.   &nbs 525j91f p;   &nbs 525j91f p;  C - tai nepriklausoma nuo masinos tipo procedūrinė programavimo kalba

.   &nbs 525j91f p;   &nbs 525j91f p;  Koks skirtumas tarp C ir C++? C++ - tai objektinis procedūrinės programavimo kalbos C poaibis

.   &nbs 525j91f p;   &nbs 525j91f p;  Kokias programas galima parasyti naudojant C/C++?

1.2. Programavimo kalbų klasifikacija

.   &nbs 525j91f p;   &nbs 525j91f p;  Kas yra kalba ? Ar pvz. matematika kalba ?

.   &nbs 525j91f p;   &nbs 525j91f p;  Kokios kalbos yra natūralios ir kokios dirbtinės ?

.   &nbs 525j91f p;   &nbs 525j91f p;  Kodėl programos nerasomos natūralia kalba ? Kas nulėmė tokią programavimo kalbų struktūrą kokia yra dabar ?

.   &nbs 525j91f p;   &nbs 525j91f p;  Zemo lygio programavimo kalbos:

.   &nbs 525j91f p;   &nbs 525j91f p;  masininiai kodai

.   &nbs 525j91f p;   &nbs 525j91f p;  - asembleriai (ypatybės ?)

.   &nbs 525j91f p;   &nbs 525j91f p;  Auksto lygio programavimo kalbos:

.   &nbs 525j91f p;   &nbs 525j91f p;  -procedūrinės: Fortran, Pascal, C

.   &nbs 525j91f p;   &nbs 525j91f p;  -interpretatoriai: Basic

.   &nbs 525j91f p;   &nbs 525j91f p;  objektinės: C++, Java, Delphi (ypatybės ?)

Programavimo priemonių rinkinys

.   &nbs 525j91f p;   &nbs 525j91f p;  Ką reikia turėti norint parasyti veikiančią programą ?

Trys pagrindiniai komponentai:

Ø   &nbs 525j91f p;    Redaktorius - tam, kad parasyti programos iseities kodą. Tinka bet koks redaktorius (pvz. Microsoft Word), bet dazniausiai naudojami specializuoti

Ø   &nbs 525j91f p;    Kompiliatorius - tam, kad parasytą programos kodą paversti į masininius kodus, taip vadinamą objektinį modulį

Ø   &nbs 525j91f p;    Linkeris - kad prie objektinio modulio prijungti kitus objektinius modulius, bibliotekose surinktą kodą ir gauti vykdomąją programą.

.   &nbs 525j91f p;   &nbs 525j91f p;  Siuolaikinėse sistemose dazniausiai naudojamos integruotos sistemos, apjungiančios visus tris komponentus

.   &nbs 525j91f p;   &nbs 525j91f p;  Vis dazniau naudojamas vizualinis programavimas. Tačiau sunkiausią dalį programuotojas vis tiek turi padaryti pats

1.4. C kalbos programavimo priemonės

Yra sukurta daug programavimo priemonių rasyti programas C kalba:

Ø   &nbs 525j91f p;    Nemokamos: gcc kompiliatorius, Mars C, lcc ir t.t.

Ø   &nbs 525j91f p;    Komercinės: Microsoft C, Borland C, Symantec C ir t.t.

Ø   &nbs 525j91f p;    Įprastinės: Turbo C, Borland C, Symantec C

Ø   &nbs 525j91f p;    Vizualinio programavimo: Microsoft Visual C, Borland C Builder

.   &nbs 525j91f p;   &nbs 525j91f p;  Kurios geriausios ? Tos, prie kurių labiausiai esi pripratęs ir gali greičiausiai pasiekti reikiamą tikslą.

1.5. Programos leksika ir sintaksė

.   &nbs 525j91f p;   &nbs 525j91f p;  Programą, parasytą C kalba, sudaro vienas arba keli failai

.   &nbs 525j91f p;   &nbs 525j91f p;  Kiekvieną failą sudaro funkcijų ir kintamųjų bei veiksmų su jais aprasymas

.   &nbs 525j91f p;   &nbs 525j91f p;  Leksiskai programa susideda is bazinių arba raktinių zodzių (angl. keywords) specialių zenklų, identifikatorių, konstantų ir komentarų

.   &nbs 525j91f p;   &nbs 525j91f p;  C kalboje naudojamos tiek didziosios, tiek mazosios raidės, tačiau yra priimta eilė neoficialių susitarimų, kurių pravartu laikytis

1.6. Kintamieji ir konstantos

.   &nbs 525j91f p;   &nbs 525j91f p;  Duomenys, kuriuos apdoroja kompiuteris - tai konstantos ir kintamieji

.   &nbs 525j91f p;   &nbs 525j91f p;  C kalboje visi kintamieji turi būti aiskiai aprasyti

.   &nbs 525j91f p;   &nbs 525j91f p;  Kintamojo aprasymas - tai jo tipo specifikavimas, kintamojo vardo uzdavimas, eilė neprivalomų modifikatorių, kurie apibrėzia vidines kintamojo vaizdavimo ypatybes arba jo saugojimo klasę.

.   &nbs 525j91f p;   &nbs 525j91f p;  Aprasant kintamąjį galima nurodyti jo pradinę reiksmę

.   &nbs 525j91f p;   &nbs 525j91f p;  Identifikatorius - tai seka raidzių arba skaičių, kurie prasideda raide arba pabraukimo zenklu _

.   &nbs 525j91f p;   &nbs 525j91f p;  Kintamojo vardas - tai identifikatorius . Vardas gali būti bet kokio ilgio, bet tik pirmi 32 simboliai bus reiksminiai

1.7. Kintamųjų tipai

.   &nbs 525j91f p;   &nbs 525j91f p;  Tipas - bet kuriai programavimo kalbai fundamentali sąvoka

.   &nbs 525j91f p;   &nbs 525j91f p;  C kalboje skiriami 4 kategorijų tipai

.   &nbs 525j91f p;   &nbs 525j91f p;  Tusčias tipas (void)

.   &nbs 525j91f p;   &nbs 525j91f p;  Skaliarinis tipas:

-   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;    aritmetiniai tipai

-   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;    isvardijimai (enumerations)

-   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;    rodikliai (pointers)

-   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;    nuorodos (references)

.   &nbs 525j91f p;   &nbs 525j91f p;  Tipas funkcija

.   &nbs 525j91f p;   &nbs 525j91f p;  Agreguotas tipas:

-   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;    masyvai (arrays)

-   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;    struktūros ir sąjungos

-   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;    klasės (tik C++ poaibyje)

.   &nbs 525j91f p;   &nbs 525j91f p;  Kitaip kintamieji gali būti skirstomi į :

-   &nbs 525j91f p;   &nbs 525j91f p;  pagrindinius

-   &nbs 525j91f p;   &nbs 525j91f p;  isvestinius

.   &nbs 525j91f p;   &nbs 525j91f p;  Pagrindiniai tipai C kalboje yra:

void char int float double

ir jų variantai su raktiniais zodziais

short long signed unsigned

.   &nbs 525j91f p;   &nbs 525j91f p;  Isvestiniai tipai:

-   &nbs 525j91f p;   &nbs 525j91f p;  rodikliai ir nuorodos į kitus duomenų tipus

-   &nbs 525j91f p;   &nbs 525j91f p;  funkcijos

-   &nbs 525j91f p;   &nbs 525j91f p;  struktūros ir sąjungos

-   &nbs 525j91f p;   &nbs 525j91f p;  klasės

Duomenų tipas int

.   &nbs 525j91f p;   &nbs 525j91f p;  C kalboje duomenų tipas int (integer, integral ?) savyje apjungia duomenų tipus char, short, long

.   &nbs 525j91f p;   &nbs 525j91f p;  Pats duomenų tipas int yra bazinis ir priklauso nuo operacinės sistemos skiltiskumo: jo dydis lygus operacinės sistemos adresavimo skiltiskumui (16 bitų Win16, 32 bitai Win32, ateityje 64 bitai ?)

.   &nbs 525j91f p;   &nbs 525j91f p; 

bitai

min

max

char

unsigned char

short int

int

unsigned int

long

unsigned long

Sveiko tipo konstantos

.   &nbs 525j91f p;   &nbs 525j91f p;  Sveiko tipo (int) konstantos gali būti uzrasomos desimtaine, astuntaine arba sesioliktaine sistema:

.   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   

.   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   

.   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;   &nbs 525j91f p;    0x15,0x5,0x65,0x156,0x25af

.   &nbs 525j91f p;   &nbs 525j91f p;  Desimtainės konstantos paprastoje formoje suprantamos kaip short int kintamieji.

.   &nbs 525j91f p;   &nbs 525j91f p;  Jeigu reikia uzrasyti didesnius kintamuosius, reikia naudoti tipo modifikatorius U(u) - unsigned arba L(l) - long

.   &nbs 525j91f p;   &nbs 525j91f p;  Pvz.: negalima rasyti 40156 , 1256789, -35674 ir t.t.

.   &nbs 525j91f p;   &nbs 525j91f p;  Reikia rasyti 40156u, 1256789l, -35674l ir t.t.

.   &nbs 525j91f p;   &nbs 525j91f p;  Galima naudoti tiek U ir L, tiek u ir l

1.10. Slankaus kablelio konstantos

.   &nbs 525j91f p;   &nbs 525j91f p;  Sveikais tipais negalima aprasyti trupmeninių skaičių: reikia naudoti slankaus kablelio tipus

.   &nbs 525j91f p;   &nbs 525j91f p;  C kalboje naudojami trys slankaus kablelio duomenų tipai: float, double, long double

bitai

min

max

tikslumas

float

double

long double

1.11. Kintamųjų aprasymo pavyzdziai

Keli kintamųjų aprasymo pavyzdziai:

.   &nbs 525j91f p;   &nbs 525j91f p;  int i;

.   &nbs 525j91f p;   &nbs 525j91f p;  signed short a; unsigned short k;

.   &nbs 525j91f p;   &nbs 525j91f p;  short a, b , abcd=0xabcd;

.   &nbs 525j91f p;   &nbs 525j91f p;  unsigned char b1=156;

.   &nbs 525j91f p;   &nbs 525j91f p;  float bb, c=0.0,z=1.e-5;

.   &nbs 525j91f p;   &nbs 525j91f p;  double pi=3.1415928;

.   &nbs 525j91f p;   &nbs 525j91f p;  long double c1; double _z1erw=123.4561;

1.12. Pri jimo modifikatoriai const ir volatile

.   &nbs 525j91f p;   &nbs 525j91f p;  Neprivalomi modifikatoriai padeda apibrėzti kintamuosius, kurie programos vykdymo metu gali arba negali pakeisti savo reiksmes

.   &nbs 525j91f p;   &nbs 525j91f p;  const - negali

.   &nbs 525j91f p;   &nbs 525j91f p;  volatile - gali (naudojamas pagal nutylėjimą)

.   &nbs 525j91f p;   &nbs 525j91f p; 

.   &nbs 525j91f p;    Pvz: const int max_const

.   &nbs 525j91f p;   &nbs 525j91f p;  Naudojama, kuomet norima apsidrausti, kad programos vykdymo metu netyčia nebūtų pakeista reikalinga kintamojo reiksmė

1.13. Komentarai

.   &nbs 525j91f p;   &nbs 525j91f p;  C/ C++ kalboje komentarus galima įterpti dviem būdais:

1) /* ..... */ - komentarai rasomi tarp sleso ir zvaigzdės ir zvaigzdės ir sleso. Komentarų kiekis neribojamas

2)   &nbs 525j91f p;  po dviejų slesų visa eilutė iki galo traktuojama kaip komentarai

Pvz. /* as čia dabar rasau komentarus

kiek noriu tiek rasau. ir čia komentaras int a/c;

dabar baigiu */

int a; // o dabar komentarai , int a - čia irgi komentaras

1.14. Gero stiliaus reikalavimai

Naudoti prasmingus pavadinimus globaliniams kintamiesiems ir trumpus pavadinimus - lokaliniams

Patartina globalinių kintamųjų aprasymus paydėti trumpu komentaru

.   &nbs 525j91f p;    Pvz: int npending=0; // ivedimo srauto einamas ilgis

.   &nbs 525j91f p;    Pvz: numberOfPoints - globalinis kintamasis

.   &nbs 525j91f p;    nPoints - tiek globalinis, tiek lokalinis

.   &nbs 525j91f p;    n -lokalinis kintamasis

Egzistuoja daug susitarimų ir vietinių tradicijų kaip reikėtų parinkti pavadinimus kintamiesiems įvairiose sistemose ir uzdaviniuose

  • Būkite nuoseklūs: panasios kilmės objektams reikėtų parinkti atitinkamus pavadinimus, parodančius jų panasumus ir skirtumus
  • Būkite tikslūs: vardas reiskia ne tik objektą, bet ir jo prasmę !!!

1.15. Operacijos ir israiskos

Israiska - tai seka operandų, operacijų ir skiriamųjų zenklų.

Skiriamieji simboliai: [ ] , ; : ... * = #

Israiskas kompiliatorius interpretuoja grieztai besilaikydamas vyresniskumo taisyklių

Vyresniskumo taisyklės kaip matematikoje priimtos

1.16. Pagrindinės operacijos: aritmetinės operacijos

Tipinės operacijos:

.   &nbs 525j91f p;    Sumavimo operacija +

.   &nbs 525j91f p;    Atėmimo operacija -

.   &nbs 525j91f p;    Daugybos operacija *

.   &nbs 525j91f p;    Dalybos operacija /

C kalbos specifinės operacijos:

.   &nbs 525j91f p;    Liekanos nustatymo operacija

.   &nbs 525j91f p;    Inkremento operacija ++

.   &nbs 525j91f p;    Dekremento operacija --

1.17. Pagrindin s operacijos: poskiltinės loginės operacijos

.   &nbs 525j91f p; Vadinamos poskiltinėmis todėl, kad loginiai veiksmai atliekami su kiekviena kintamojo arba konstantos skiltimi atskirai

.   &nbs 525j91f p; Yra keturios:

.   &nbs 525j91f p; & - loginis IR (AND operacija)

.   &nbs 525j91f p; - poskiltinis sumavimas moduliu 2 (XOR operacija)

.   &nbs 525j91f p; - loginis ARBA (OR operacija)

.   &nbs 525j91f p; poskiltinė inversija

1 operandas

2 operandas

AND

OR

XOR

1.18. Pagrindinės operacijos: postūmio operacijos

.   &nbs 525j91f p; Poskiltinio postūmio operacijos:

>> - postūmis desinėn

<< - postūmis kairėn

Pvz: half = addr>>1;

double = addr<<1;

Pvz: 5 - > 101 <<1 -> 1010 -> 10

12 -> 1100>>1 -> 110 -> 6

3 -> 11 <<3 -> 11000 -> 24

Priskyrimo operacija =. Pvz. a=b;

Pagrindinės operacijos: loginės operacijos ir santykio operacijos

Santykio operacijos:

.   &nbs 525j91f p; > - daugiau

.   &nbs 525j91f p; < - maziau

.   &nbs 525j91f p; - tapačiai lygu

.   &nbs 525j91f p; >= - daugiau arba lygu

.   &nbs 525j91f p; <= - maziau arba lygu

.   &nbs 525j91f p; - nelygu

.   &nbs 525j91f p; Teisinga, jei operandas is kairės tenkina sąlygą

Loginės operacijos:

.   &nbs 525j91f p; && - loginis IR

.   &nbs 525j91f p; - loginis ARBA

.   &nbs 525j91f p; - loginis NE

.   &nbs 525j91f p; Sios operacijos naudojamos sudarant logines israiskas, turinčias tik dvi reiksmes: 1, jei israiska teisinga ir 0, jei israiska neteisinga

1.20. Sąlygos operacija ? :

.   &nbs 525j91f p;   &nbs 525j91f p;  Sąlygos operacija ? : apibrėziama kaip:

cond ? TRUE_statement : FALSE_statement

.   &nbs 525j91f p;   &nbs 525j91f p;  Pvz:

int a=4, b=3;

int i;

i=a>b ? a: b;

1.21. Duomenų tipų nurodymo operacija (kastingavimas)

.   &nbs 525j91f p;   &nbs 525j91f p;  C kalboje duomenų tipus (operandų tipus) galima nurodyti aiskiai

.   &nbs 525j91f p;   &nbs 525j91f p;  Toje operacijoje kintamasis bus traktuojamas kaip nurodyta privedimo operacijoje

.   &nbs 525j91f p;   &nbs 525j91f p;  C++ operuojant su skirtingo tipo operandais duomenų tipus būtina kastinguoti

.   &nbs 525j91f p;   &nbs 525j91f p;  Kintamasis įgis nurodytą tipą tik duotoje operacijoje;

pvz.: int a=8,b=5;

float var1,var2;

var1=a/b; // var1=1.0;

var2=(float)a/b; // var2=1.6;

var2=(float)a/(float)b; // var2=1.6;

Mnimali programa C kalba

.   &nbs 525j91f p;    int main()

.   &nbs 525j91f p;    int main()

.   &nbs 525j91f p;    int main(

Pastabos: failo pavadinimas baigiasi plėtiniu .c arba .cpp

Tarpus kompiliatorius ignoruoja

Orientuotas į leksemas, o ne pozicijas faile

1.23. Pirmos programos pavyzdys

#include <stdio.h>

int main()

Rezultatas: Hello world !!! count=1

2. II-OJI PASKAITA

Bazinio įvedimo/ isvedimo metodai

.   &nbs 525j91f p;   &nbs 525j91f p;  Skirtingi metodai naudojami konsoliniame įvedime/isvedime ir programose su langais

.   &nbs 525j91f p;   &nbs 525j91f p;  Čia kalbame apie konsolinį I/O

.   &nbs 525j91f p;   &nbs 525j91f p;  C++ turi savus operatorius, C specialių operatorių neturi

.   &nbs 525j91f p;   &nbs 525j91f p;  Naudojamos bibliotekinės funkcijos

.   &nbs 525j91f p;   &nbs 525j91f p;  Kas yra biblioteka, kas yra funkcija ?

.   &nbs 525j91f p;   &nbs 525j91f p;  Standartinė įvedimo / isvedimo biblioteka:

.   &nbs 525j91f p;   &nbs 525j91f p;  #include <stdio.h>

.   &nbs 525j91f p;   &nbs 525j91f p;  Konsolinio įvedimo / isvedimo biblioteka

.   &nbs 525j91f p;   &nbs 525j91f p;  # include <conio.h>

2.2. Formatuotas isvedimas

.   &nbs 525j91f p;    Pavadinimas printf()

.   &nbs 525j91f p;    Sinopsė

.   &nbs 525j91f p;    #include <stdio.h>

.   &nbs 525j91f p;    int printf(const format[,arg].)

.   &nbs 525j91f p;    Aprasymas: į standartinį isvedimo įrenginį (koks įrenginys yra standartinis ?) isveda nurodytą duomenų srautą, sutinkamai su nurodytu formatu format: tai gali būti literaliniai simboliai ir transformavimo specifikatoriai:

.   &nbs 525j91f p; %d - desimtainis sveikas skaičius

.   &nbs 525j91f p; %f - slankaus kablelio skaičius

.   &nbs 525j91f p; %o - astuntainis skaičius be zenklo

.   &nbs 525j91f p; %x - sesioliktainis skaičius be zenklo

Formatuotas isvedimas

.   &nbs 525j91f p;    Pavadinimas printf()

.   &nbs 525j91f p;    Sinopsė

.   &nbs 525j91f p;    #include <stdio.h>

.   &nbs 525j91f p;    int printf(const format[,arg].)

.   &nbs 525j91f p;    Aprasymas: į standartinį isvedimo įrenginį (koks įrenginys yra standartinis ?) isveda nurodytą duomenų srautą, sutinkamai su nurodytu formatu format: tai gali būti literaliniai simboliai ir transformavimo specifikatoriai:

%d - desimtainis sveikas skaičius

%f - slankaus kablelio skaičius

%o - astuntainis skaičius be zenklo

%x - sesioliktainis skaičius be zenklo

Pavyzdziai:

.   &nbs 525j91f p;    printf("iveskite varda:");

.   &nbs 525j91f p;    printf("turimas akciju skaicius %d\n",num);

.   &nbs 525j91f p;    printf("\n sio menesio %2d diena nupirkta %3d akciju\n",diena, num);

.   &nbs 525j91f p;    printf("vieneto kaina %f", kaina);

.   &nbs 525j91f p;    printf("vieneto kaina %4.2f bendra kaina %6.2f\n",kaina, total);

.   &nbs 525j91f p;    printf("vienetu skaicius %d vieneto kaina %4.2d bendra kaina %6.2f\n",kiekis, kaina, total);

.   &nbs 525j91f p;    printf(" | vienetu skaicius %d vieneto kaina %4.2d bendra kaina %6.2f | \n",kiekis, kaina, total);

2.4. Konsolinis įvedimas

.   &nbs 525j91f p;    Pavadinimas scanf()

.   &nbs 525j91f p;    Sinopsė

.   &nbs 525j91f p;    #include <stdio.h>

.   &nbs 525j91f p;    int scanf(const format[,arg].)

.   &nbs 525j91f p;    Aprasymas: is standartinio įvedimo įrenginio (koks įrenginys yra standartinis ?) nuskaito nurodytą duomenų srautą, sutinkamai su nurodytu formatu format:

.   &nbs 525j91f p;    %d - desimtainis sveikas skaičius

.   &nbs 525j91f p;    %f - slankaus kablelio skaičius

.   &nbs 525j91f p;    %o - astuntainis skaičius be zenklo

.   &nbs 525j91f p;    %x - sesioliktainis skaičius be zenklo

.   &nbs 525j91f p;    %c - simbolis

.   &nbs 525j91f p;    scanf(" d", &num

.   &nbs 525j91f p;    scanf %f",&price);

.   &nbs 525j91f p;    scanf("%d %d",&diena, &num);

.   &nbs 525j91f p;    scanf("%4.2f %6.2f",&kaina, &total);

.   &nbs 525j91f p;    scanf("%d %f %f",&kiekis, &kaina, &total);

.   &nbs 525j91f p;    scanf("%c",&raide);

.   &nbs 525j91f p;    scanf("%d",a[i]);

.   &nbs 525j91f p;    scanf("%s" pavadin);

2.5. Simbolinis įvedimas/ isvedimas

.   &nbs 525j91f p;    Pavadinimas: getchar įvedimo funkcija

.   &nbs 525j91f p;    Sinopsė:

.   &nbs 525j91f p;    include <stdio.h>

.   &nbs 525j91f p;    int getchar(void)

Aprasymas: nuskaito ir grazina eilinį simbolį is standartinio nuskaitymo įrenginio

Diagnostika: grazina EOF simbolį, jeigu pasiektas failo galas arba klaidos simbolį, įvykus įvedimo klaidai. Visais kitais atvejais grazina nuskaitytą simbolį

.   &nbs 525j91f p;    Pavadinimas: putchar isvedimo funkcija

.   &nbs 525j91f p;    Sinopsė:

.   &nbs 525j91f p;    include <stdio.h>

.   &nbs 525j91f p;    int putchar(int c)

Aprasymas: isveda eilinį simbolį į standartinį isvedimo įrenginį

Diagnostika: grazina isvestą simbolį, jeigu isvedimas atliktas sėkmingai, priesingu atveju grazina EOF simbolį.

.   &nbs 525j91f p;    Pavyzdziai

#include <stdio.h>

int main()

Skaičiavimo proceso valdymo operatoriai

.   &nbs 525j91f p; Skaičiavimo procesas - tai programos operatorių vykdymo seka

.   &nbs 525j91f p; Paprastai programos operatoriai vykdomi elės tvarka: is virsaus į apačią, is kairės į desinę

.   &nbs 525j91f p; Kartais normalią veiksmų vykdymo seką reikia pakeisti

.   &nbs 525j91f p; Kam reikia pakeisti valdymo seką ? Uzdavinio sprendimas reikalauja

.   &nbs 525j91f p; Naudojami specialūs operatoriai - skaičiavimo proceso valdymo operatoriai

.   &nbs 525j91f p; Sakojimosi operatoriai, sąlygos operatoriai, ciklo operatoriai

.   &nbs 525j91f p; if, if-else, while, do while, switch - case - break, for, break, continue, goto, return

2.7. Operatorius if

.   &nbs 525j91f p; Sakojimosi operatoriai isrenka programoje galimą proceso tąsą is eilės alternatyvų

.   &nbs 525j91f p; C kalboje yra du sakojimosi operatoriai - if ir switch

.   &nbs 525j91f p; if - paprasčiausias sąlygos operatorius

.   &nbs 525j91f p; if operatoriaus apibrėzimas:

if(cond_expression) TRUE_statement;

.   &nbs 525j91f p;    cond_expession - sąlygos israiska

.   &nbs 525j91f p;    TRUE_statement - israiska, kuri vykdoma jei sąlyga teisinga

.   &nbs 525j91f p;    Pavyzdziai:

.   &nbs 525j91f p;    if(x>largest) largest x;

.   &nbs 525j91f p;    if( val<min || val>max)

.   &nbs 525j91f p;    if(num<0) num=-num;

.   &nbs 525j91f p;    c=getchar();

if(c=='\n') lines+=1;

.   &nbs 525j91f p;    ekvivalentinis if((c=getchar()) =='\n') lines+=1;

.   &nbs 525j91f p;    neekvivaletinis if(c=getchar()=='\n') lines+=1;

2.8. Operatorius if-else

if ir else - raktiniai zodziai

.   &nbs 525j91f p;   &nbs 525j91f p;  Jeigu israiska teisinga - vykdoma pirmoji israiska, jeigu israiska neteisinga - pirmoji israiska praleidziama ir vykdoma antroji israiska

.   &nbs 525j91f p;   &nbs 525j91f p;  Tiek pirmoji, tiek antroji israiskos gali būti paprastos arba blokinės

.   &nbs 525j91f p;   &nbs 525j91f p;  Apibrėzimas:

.   &nbs 525j91f p;   &nbs 525j91f p;  if(cond_expression) True_statement;

else False_statement;

.   &nbs 525j91f p;   &nbs 525j91f p;  cond_expession - sąlygos israiska

.   &nbs 525j91f p;   &nbs 525j91f p;  TRUE_statement - israiska, kuri vykdoma jei sąlyga teisinga

.   &nbs 525j91f p;   &nbs 525j91f p;  FALSE_statement - israiska, kuri vykdoma, jei sąlyga neteisinga

Pavyzdziai

.   &nbs 525j91f p;   &nbs 525j91f p;  if(kiekis<100) printf("atsargu kiekis mazas");

else printf("atsargu kiekis pakankamas");

.   &nbs 525j91f p;   &nbs 525j91f p;  if(x

y=y/x;

else

.   &nbs 525j91f p;   &nbs 525j91f p;  if(hour>=3 && hour<17)

rate*=1.02;

else if(hour>=17 && hour<23)

rate*=1.01;

else rate*=0.99;

Pastaba operatoriai if-else yra inkliuzyviniai: į vieną if-else operatorių galima įstatyti kitą.

Inkliuzyvų kiekis neribojamas

2.9. Else atskyrimo problemos: klaidų saltinis

.   &nbs 525j91f p;    if(c>' ')

if(c>='0' && c<='9')

digits+=1;

else

count+=1;

.   &nbs 525j91f p;    Kuriam if priskiriamas else ?

.   &nbs 525j91f p;    if(c>' ')

else

count+=1;

2.10. Operatoriai switch-case- break

.   &nbs 525j91f p; Daznai pasitaikantis programavimo uzdavinys: isrinkti vieną alternatyvą is daugelio galimų variantų

.   &nbs 525j91f p; Tai patogu atlikti naudojant switch-case operatorių

.   &nbs 525j91f p; Operatoriaus sintaksė:

switch(switch_expression)

.   &nbs 525j91f p;   &nbs 525j91f p;  Iliustracija

.   &nbs 525j91f p;   &nbs 525j91f p;  input=getchar();

switch(input)

2.11. Ciklo operatoriai

.   &nbs 525j91f p;    Ciklas - tai tų pačių veiksmų pakartojimas nurodytą skaičių kartų

.   &nbs 525j91f p;    C kalba turi tris ciklo uzrasymo formas:

.   &nbs 525j91f p;   &nbs 525j91f p;  while(cond_expression) operators;

.   &nbs 525j91f p;   &nbs 525j91f p;  do operators while(cond_expression);

.   &nbs 525j91f p;   &nbs 525j91f p;  for(init_expr; cond_expr; incr_expr) operators;

.   &nbs 525j91f p;    Kuri uzrasymo forma geriausia ? Priklauso nuo konkrečių sąlygų

.   &nbs 525j91f p;    Visomis uzrasymo formomis galima uzrasyti bet kurį ciklą

Besąlyginio perėjimo operatoriai

.   &nbs 525j91f p;   &nbs 525j91f p;  Yra keturi besąlyginio perėjimo operatoriai C kalboje: break, continue, goto, return

.   &nbs 525j91f p;   &nbs 525j91f p;  Besąlyginio perėjimo operatoriai - sutikus tokį operatorių programos valdymas automatiskai perduodamas į apibrėztą vietą

.   &nbs 525j91f p;   &nbs 525j91f p;  break - iseina is duoto bloko ir tęsia vykdymą is karto nuo sekančio operatoriaus uz bloko

.   &nbs 525j91f p;   &nbs 525j91f p;  continue - naudojamas cikle, automatiskai pereina prie sekančios ciklo iteracijos

.   &nbs 525j91f p;   &nbs 525j91f p;  return - grįzta is funkcijos. valdymas perduodamas į funkcijos iskvietimo taską

.   &nbs 525j91f p;   &nbs 525j91f p;  goto label - valdymas automatiskai perduodamas į programos taską, kurį zymi markeris label

2.13. Gero stiliaus reikalavimai

1) Formatuokite kodą taip, kad pabrėzti jo struktūrą

.   &nbs 525j91f p;    Blogas formatavimas:

for(n++;n<100;n++) field[n++]='\0';

*i='\0'; return('\n');

.   &nbs 525j91f p;    Geras formatavimas:

for(n++;n<100;n++)

field[n++]='\0';

*i='\0';

return '\n';

rasykite israiskas natūralia forma: rasykite taip, kaip skaitytumėte

  • Blogai: 

if(!(block_id<actblk) || !(block_id>=unblock))

  • Gerai: 

if((block_id>=actblk) || (block_id<unblock))

3)   &nbs 525j91f p;    Naudokite skliaustelius, kad panaikinti neaISKUMUS

.   &nbs 525j91f p;    Pavyzdys su kelintiniais metais

.   &nbs 525j91f p;    leap_year= y%4==0 && y%100!=0 ||y%400==0;

.   &nbs 525j91f p;    leap_year= ((y%4==0) && (y%100!=0)) ||(y%400==0);

4) Skaidykite sudėtingas israiskas:

.   &nbs 525j91f p;    Blogai: x+=(xp=(2*k<(n-m) ? c[k+1] : d[k--]));

.   &nbs 525j91f p;    Gerai: if(2*k<n-m)

xp=c[k+1];

else

xp=d[k--];

x+=xp;

5) Būkite paprastesni: nereikia persistengti rasant labai įmantrias israiskas:

.   &nbs 525j91f p;    Blogai: subkey=subkey>>(bitoff>>3)<<3));

.   &nbs 525j91f p;    Gerai: subkey=subkey>>(bitoff&0x7));

subkey>>=bitoff&0x7;

Absoliučiai mįslinga konstrukcija:

child=(!LC&&!RC)?0:!(LC?RC:LC);

Paprastai: if(LC==0 && RC==0)

child=0;

else if(LC==0)

child=RC;

else

child=LC;

6) Būkite atsargūs u pasaliniais efektais: ++ tipo operacijos turi pasalinius efektus: jos ne tik grazina reiksmę, bet ir pakeičia operando reiksmę

.   &nbs 525j91f p;    Blogai: str[i++]=str[i++]='A';

blogai, nes nėra apibrėzta ++ operacijos vykdymo tvarka)

.   &nbs 525j91f p;    Gerai: str[i++]='A';

.   &nbs 525j91f p;    str[i++]='A';

3. III-IOJI PASKAITA: Rodikliai. Nuorodos. Masyvai.

3.1. Rodiklio sąvoka

.   &nbs 525j91f p; Idėja panaudoti adresus - labai sena.

.   &nbs 525j91f p; Programose rasomose masininiais kodais arba asembleriu daznai sutinkamas uzdavinys - perkelti duomenis is vieno adreso į kitą

.   &nbs 525j91f p; Tokiose programose tai atliekama paprastai

.   &nbs 525j91f p; Auksto lygio programavimo kalbose daznai apie adresus negalvojama, o kai kuriose ir nėra jokių priemonių operuoti su adresais

.   &nbs 525j91f p; C kalboje yra abiejų būdų komponentų: tiek darbui su adresais, tiek ir ne tiesioginio adresavimo galimybių

.   &nbs 525j91f p; Kas yra rodiklis? Kintamasis, kuriame saugomas adresas

.   &nbs 525j91f p; Apibrėzimas: kntamasis-rodiklis (arba tiesiog vadinama rodikliu) - ta kintamasis, skirtas adreso saugojimui atmintyje

.   &nbs 525j91f p; Kam naudojami rodikliai?

§   &nbs 525j91f p;  Kad efektyviai prieiti prie duomenų

§   &nbs 525j91f p;  Lanksčios programos parasymui

§   &nbs 525j91f p;  Kintamųjų, perduodamų į funkciją, reiksmių pakeitimui

§   &nbs 525j91f p;  Darbui su dinamiskai paskirstoma atmintimi

§   &nbs 525j91f p;  Priėjimui prie aparatinių kompiuterio resursų arba papildomų įrenginių

3.2. Rodikliai ir nuorodos C kalboje

.   &nbs 525j91f p;    C kalboje apibrėztos dvi specialios operacijos kintamųjų adresavimui per rodiklius

o   &nbs 525j91f p;    operacija & - nuorodos (reference) operacija

o   &nbs 525j91f p;    operacija - rodiklio (pointer) operacija

Operacijos & rezultatas - tai objekto, kuriam taikoma i operacija, adresas

Operacija * - tai kreipinys į atminties ląstelę, kurios adresas saugomas tame objekte

3.3. Rodiklių aprasymas, inicializavimas ir naudojimas

.   &nbs 525j91f p;   &nbs 525j91f p;  Kintamasis p aprasomas kaip rodiklis į sveiko tipo kintamąjį. Tai reiskia kad jame bus saugomas sveiko tipo kintamojo adresas

.   &nbs 525j91f p;   &nbs 525j91f p;  int num1=3, num2=6, *p;

.   &nbs 525j91f p;   &nbs 525j91f p;  Visi rodikliai turi būti inicializuoti

.   &nbs 525j91f p;   &nbs 525j91f p;  p=&num1;

.   &nbs 525j91f p;   &nbs 525j91f p;  Rodiklis p dabar "rodys" į kintamąjį num1

.   &nbs 525j91f p;   &nbs 525j91f p;  Dabar kintamąjį num1 bus galima adresuoti tiesiogiai, naudojant priskyrimo operaciją = , arba kaip rodiklį, naudojant operatorių *


9.11. Klasifikavimo sablonai


9.12. Mechanizmų klasifikacija

.   &nbs 525j91f p;    Mechanizmas - tai suderinta objektų klasių sąveika, tenkinanti tam tikrus isorinius reikalavimus

.   &nbs 525j91f p;    Specifinės sudėtingų, painių objektų savybės isreiskiamos per priklausomybę nuo projektinių sprendimų

.   &nbs 525j91f p;    Mechanizmų klasifikacija atliekama per:

-   &nbs 525j91f p;   &nbs 525j91f p;  Esminių mechanizmų identifikaciją

-   &nbs 525j91f p;   &nbs 525j91f p;  Naujų mechanizmų isradimą

9.13. Konstruktoriai ir destruktoriai

.   &nbs 525j91f p;   &nbs 525j91f p;  Daznai sukuriant objektą, reikia atlikti pradinę objekto inicializavimą, pvz. isskirti atminties sritis masyvams, priskirti kintamiesiems pradines reiksmes.

.   &nbs 525j91f p;   &nbs 525j91f p;  Objektą sunaikinant atminties sritis reikia atlaisvinti

.   &nbs 525j91f p;   &nbs 525j91f p;  C++ tuo tikslu yra sukurt specialūs metodai, vadinami konstruktoriais ir destruktoriais

.   &nbs 525j91f p;   &nbs 525j91f p;  Funkcija-konstruktorius visada turi ta patį pavadinimą, kaip ir klasė. Ji leidzia atlikti objekto inicializavimą jo sukūrimo metu

.   &nbs 525j91f p;   &nbs 525j91f p;  Funkcija-destruktorius taip pat turi tą patį pavadinimą kaip ir klasė, bet pries pavadinimą visada dedamas tildės ~ zenklas. Ji atlieka objekto sunaikinimą.


9.14. Bendri klasės objektų nariai

.   &nbs 525j91f p;   Kai kada yra patogu, kad visi duotos klasės objektai turėtų bendrus duomenų elementus, kurie ir yra naudojami bendrai.

.   &nbs 525j91f p;   Bendri klasės duomenų elementai apibrėziami naudojant raktinį zodį static

.   &nbs 525j91f p;   Pvz: class CWindow

char CWindow::title[80]="lango pavadinimas";

Kiekvienas klasės CWindow objektas turės unikalias lango koordinates ir tą patį lango pavadinimą

Draugiskos klasės ir draugiskos funkcijos

.   &nbs 525j91f p;   C++ galima uzduoti draugiską klase funkciją, naudojant raktinį zodį friend.

.   &nbs 525j91f p;   Aprasant klasę nurodomas tiktai funkcijos pavadinimas.

.   &nbs 525j91f p;   Draugiska funkcija nėra klasės elementas, bet ji gali prieiti prie visų klasės elementų, įskaitant ir private bei protected elementus

class point ;

void Clear(point *ptr)

.   &nbs 525j91f p;    Analogiskai galima uzduoti ir draugiskas klases:

class point ;

class line

9.16. Paveldėjimas

.   &nbs 525j91f p;   &nbs 525j91f p; Prisiminkime tris bazinius objektinio programavimo principus: inkapsuliaciją, paveldėjimą ir polimorfizmą

.   &nbs 525j91f p;   &nbs 525j91f p; Paveldėjimas - antrasis is sių bazinių principų

.   &nbs 525j91f p;   &nbs 525j91f p; Is kur kilo idėja panaudoti paveldėjimą ? Be abejo is gamtos

.   &nbs 525j91f p;   &nbs 525j91f p; Ką gamtoje reiskia paveldėjimas ?

.   &nbs 525j91f p;   &nbs 525j91f p; Objektiniame programavime paveldėjimas reiskia beveik tą patį, ką ir gamtoje

.   &nbs 525j91f p;   &nbs 525j91f p; Motininės klasės perduoda savo savybes dukterinėms klasėms

.   &nbs 525j91f p;   &nbs 525j91f p; Dazniausiai naudojami pavadinimai: bazinė klasė ir isvestinė klasė; kartais naudojamos sąvokos - motininė klasė ir dukterinė klasė

.   &nbs 525j91f p;   &nbs 525j91f p; Is anksčiau isvestų klasių galima isvedinėti ir naujas isvestines klases

.   &nbs 525j91f p;   &nbs 525j91f p; Isvestinė klasė apima savyje visus bazinės klasės elementus ir metodus, bei gali juos papildyti nuosavais elementais ir metodais

.   &nbs 525j91f p;   &nbs 525j91f p; Isvestinė klasė pati gali tapti bazine klase kitoms isvestinėms klasėms. Tokiu atveju isvestinė klasė paveldės visų bazinių klasių elementus ir metodus

9.17. Vienetinis paveldėjimas

.   &nbs 525j91f p;   &nbs 525j91f p; Vienetinio paveldėjimo atveju isvestinė klasė paveldi elementus tik is vienos bazinės klasės

.   &nbs 525j91f p;   &nbs 525j91f p; Paveldėjimas apibrėziamas taip:

class [<tag>] [: <base> ] ] [<declarators>]

Angliskoje literatūroje paveldėjimas vadinamas inheritance

Sukurtoje klasėje galima apibrėzti elementus, kurių vadai sutampa su bazinės lasės elementų vardais

.   &nbs 525j91f p;   Vienetinio paveldėjimo pavyzdys:

class Base ;

classs DerivedFirst: Base ;

class DerivedSecond : Base ;

9.20. Daugybinis paveldėjimas

.   &nbs 525j91f p;   &nbs 525j91f p;   Daugybinis paveldėjimas atliekamas paveldėjimas. Isvestinė klasė siuo atveju gali turėti keletą bazinių klasių panasiai kaip vienetinis

.   &nbs 525j91f p;   &nbs 525j91f p;   Vietoj vienos bazinės klasės pavadinimo, nurodomas bazinių klasių pavadinimų sąrasas

.   &nbs 525j91f p;   &nbs 525j91f p;   Apibrėzimas:

.   &nbs 525j91f p;   &nbs 525j91f p;   class [<tag> [: [<base_list]] [<declarators>]

.   &nbs 525j91f p;   &nbs 525j91f p; Daugybinio paveldėjimo parasymo pavyzdys:

class BaseFirst ;

class BaseSecond

class Derived: BaseFirst, BaseSecond

9.21. Priėjimo prie bazinės klasės elementų apribojimas

.   &nbs 525j91f p;   Priėjimą prie klasės elementų galima valdyti naudojant priėjimo modifikatorius

.   &nbs 525j91f p;   Kuomet paveldima bazinė klasė, priėjimą galima valdyti prie bazinės klasės elementų

.   &nbs 525j91f p;   Tokiu atveju yra svarbu su kokiais specifikatoriais yra aprasyti bazinės klasės elementai

Bazinės klasės elemento specifikatorius

Bazinės klasės priėjimo specifikatorius

public

protected

private

public

public

protected

private

protected

protected

protected

private

private

9.22. Bazinės klasės metodų perdefinavimas

.   &nbs 525j91f p;   &nbs 525j91f p;  Isvestinėje klasėje galima apibrėzti metodus ir duomenų elementus tais pačiais vardais, kurie jau buvo panaudoti bazinėje klasėje

.   &nbs 525j91f p;   &nbs 525j91f p;  Tokiu atveju tie bazinės klasės elementai tampa paslėptais

.   &nbs 525j91f p;   &nbs 525j91f p;  Norint operuoti su paslėptais elementais, reikia naudoti pilną vardą:

bazinės_klasės_vardas:: elemento_vardas

Pvz:

class C: A,B

Daugybinio paveld jimopavyzdys


9.24. Rodikliai į klases

.   &nbs 525j91f p;   &nbs 525j91f p;  C++ leidziama apibrėzti rodiklius į klases.

.   &nbs 525j91f p;   &nbs 525j91f p;    Apibrėzta klasės tampa veikiančiu duomenų tipu

.   &nbs 525j91f p;   &nbs 525j91f p;  Apibrėzti rodiklį į klasę paprasčiausiai reikia panaudoti klasės pavadinimą ir rodiklio zenklą

.   &nbs 525j91f p;   &nbs 525j91f p;  CRectangle * prect; is a pointer to an object of class

.   &nbs 525j91f p;   &nbs 525j91f p;  // CRectangle

Kaip ir su kitais agreguotais duomenų tipais, norint prieiti prie rodiklių į klases elementų, reikia naudoti zenklą ->


10. X-OJI PASKAITA

Paveldėjimas. Operatorių perkrovimas.

10.1. Isvestinės klasės

.   &nbs 525j91f p;   &nbs 525j91f p;    Sudaro prielaidas sukūrimui naujos klasės, kuri yra anksčiau sukurtos klasės variacija

.   &nbs 525j91f p;   &nbs 525j91f p;    Isvestinė klasė gali prieiti prie bazinės klasės atvirų ir uzdarų narių

.   &nbs 525j91f p;   &nbs 525j91f p;    Isvestinėje klasėje nustatomi private, protected ir public bazinės klasės narių apribojimai

.   &nbs 525j91f p;   &nbs 525j91f p;    Pagal nutylėjimą nustatomi private apribojimai

.   &nbs 525j91f p;   &nbs 525j91f p;    Pilnai atitinka įprastinės klasės apribojimus, bet papildomai turi bazinės klasės elementus su nuosavais priėjimo apribojimais

10.2. Isvestinių ir bazinių klasių elementai

.   &nbs 525j91f p;    Grafiskai elementų apribojimai gali būti pavaizduoti taip:

.   &nbs 525j91f p;    Private  Base Derived

private ------ private

protected ---- private

public -------- private

.   &nbs 525j91f p;    Protected

private ------- private

protected ---- protected

public -------- protected

.   &nbs 525j91f p;    Public

private -------- private

protected ----- protected

public ---------- public

10.3. Isvestinės klasės funkcijos- nariai

.   &nbs 525j91f p;   &nbs 525j91f p; Isvestinėse klasėse gali pasitaikyti funkcijos-nariai, turinčios tuos pačius pavadinimus kaip ir bazinės klasės nariai

.   &nbs 525j91f p;   &nbs 525j91f p;  Argumentų kiekis ir jų tipai, o taip pat grazinamos reiksmės tipas gali skirtis nuo bazinės klasės metodo argumentų skaičiaus, tipai ir grazinamos reiksmės tipas

.   &nbs 525j91f p;   &nbs 525j91f p; class PayPhone: public Phone ;

Phone home(516,555,8858);

PayPhone booth(708,555,5444);


home.GiveDialTone();

// Phone::GiveDialTone();

booth.GiveDialTone();

// payPhone::GiveDialTone();

.   &nbs 525j91f p;    Isvestinės klasės funkcijos-nariai gali kreiptis į bazinės klasės funkcijas-narius.

.   &nbs 525j91f p;    Galima kreiptis net į tas funkcijas - narius, kurių pavadinimai sutampa

.   &nbs 525j91f p;    Pvz:

void PayPhone::GiveDialTone()

10.4. Priėjimo valdymas


.   &nbs 525j91f p;   &nbs 525j91f p; Pilnai virtuali funkcija - narys - tai virtuali funkcija-narys, kuriai yra deklaruotas interfeisas, o jo realizacija parasyta isvestinėje klasėje

.   &nbs 525j91f p;   &nbs 525j91f p; Tam reikia metodo apibrėzimą prilyginti nuliui

.   &nbs 525j91f p;   &nbs 525j91f p; Abstrakčios klasės destruktorius visada privalo būti virtualus

.   &nbs 525j91f p;   &nbs 525j91f p; Anstyvosios C++ versijos nepalaikė abstrakčių bazinių klasių

.   &nbs 525j91f p;   &nbs 525j91f p; Negalima apibrėzti abstrakčios klasės objekto. Galima apibrėzti tik isvestinės klasės objektą

.   &nbs 525j91f p;   &nbs 525j91f p; Pilnai virtuali funkcija niekada negali aiskiai arba netiesiogiai iskviesta is konstruktoriaus

.   &nbs 525j91f p;   &nbs 525j91f p; Is konstruktoriaus gali būt iskviesta tik per ne virtualią klasės funkciją-narę. Tačiau bus iskviesta duotoje klasėje apibrėzta funkcija

10.6. Pilnai virtualios funkcijos - nariai


Virtualios klasės ir kostruktoriai


10.8. Bazinių klasių konstruktoriai

.   &nbs 525j91f p;   &nbs 525j91f p;   Iskviečiami pries isvestinių klasių konstruktorių iskvietimą

.   &nbs 525j91f p;   &nbs 525j91f p;   Turi būti aiskiai nurodyti kiekviename isvestinės klasės apibrėzime, jeigu bazinėje klasėje nėra konstruktoriaus pagal nutylėjimą

.   &nbs 525j91f p;   &nbs 525j91f p;   Bazinės klasės konstruktoriaus pavadinimas ir jo argumentai atskiriami nuo isvestinės klasės konstruktoriaus pavadinimo dvitaskiu

.   &nbs 525j91f p;   &nbs 525j91f p;   Daugybinių bazinių klasių konstruktoriai atskiriami vienas nuo kito dvitaskiais

.   &nbs 525j91f p;   &nbs 525j91f p;   Niekada tiesiogiai arba netiesiogiai iskviesti virtualios bazinės klasės metodus


10.9. Bazinių klasių destruktoriai

.   &nbs 525j91f p;    Iskviečiami po isvestinių klasių destruktorių

.   &nbs 525j91f p;    Gali būti virtualiais. Abstrakčios klasės destruktorius gali būti virtualiu

.   &nbs 525j91f p;    Gali per ne virtualias funkcijas- narius tiesiogiai arba netiesiogiai iskviesti virtualius metodus

.   &nbs 525j91f p;    Tačiau siuo atveju iskviečiama funkcijos versija duotai klasei arba bazinei klasei, jeigu tokia egzistuoja, ir niekuomet isvestinei klasei

10.10. Daugybinės bazinės klasės

.   &nbs 525j91f p;   &nbs 525j91f p; Leidzia isvesti naują klasę daugiau negu is vienos bazinės klasės

.   &nbs 525j91f p;   &nbs 525j91f p; Bazinių klasių isvardijimo tvarka sąrase neturi įtakos.

.   &nbs 525j91f p;   &nbs 525j91f p; Priėjimas prie bazinių klasių elementų, turinčių vienodus pavadinimus, turi būti atliekamas per bazinių klasių pavadinimus

class A ;

class B ;

class C: public A, public B ;

C c;

c.f(); // klaida: kur f ?

c. A:f(); // teisingai

.   &nbs 525j91f p;   &nbs 525j91f p; Patogiausia dviprasmybes spręsti abiejų funkcijų perdengimu isvestinėje klasėje

class C: public A, public B

C c;

c.f(); // dabar teisingai

.   &nbs 525j91f p;    Klasėms, kurios yra isvestos is klasių su bendra baze, pagal nutylėjimą egzistuoja du bendros bazės objekto egzemplioriai

.   &nbs 525j91f p;    Į bendros bazinės klasės elementus galima kreiptis per bet kurios is isvestinių klasių pavadinimą

10.11. Virtualios bazinės klasės

.   &nbs 525j91f p;   &nbs 525j91f p; Klasėms, kurios yra isvestos is isvestinių klasių su bendra virtualia bazine klase, egzistuoja tiktai vienas bendros bazinės klasės elementas

.   &nbs 525j91f p;   &nbs 525j91f p; Apibrėziami raktinio zodzio virtual panaudojimu bazinės klasės priėjimo lygio specifikatoriuje

.   &nbs 525j91f p;   &nbs 525j91f p; Prieinant prie bazinės klasės elementų nebereikia nieko nurodyti papildomai

.   &nbs 525j91f p;   &nbs 525j91f p; Jų konstruktoriai iskviečiami pagal paskutinės isvestinės klasės grandinėlę

.   &nbs 525j91f p;   &nbs 525j91f p; Apibrėziant klasę galima sumaisyti su ne virtualiomis bazinėmis klasėmis

10.12. Sablonai

.   &nbs 525j91f p;   &nbs 525j91f p; Kas yra sablonas ?

.   &nbs 525j91f p;   &nbs 525j91f p; Sablonai naudojami ir objektiniame programavime

.   &nbs 525j91f p;   &nbs 525j91f p; Jie isplečia klasės ir funkcijos supratimą

.   &nbs 525j91f p;   &nbs 525j91f p; Suteikia galimybes parametrizuoti funkcijas ir klases

.   &nbs 525j91f p;   &nbs 525j91f p; Faktiskai įgalina apibrėzti funkcijas ir klases kaip "bet kurio tipo" elementus

.   &nbs 525j91f p;   &nbs 525j91f p; Sąvotiskai leidzia atsisakyti tipų

10.13. Funkcijų sablonai

.   &nbs 525j91f p;   &nbs 525j91f p; Tai funkcijos kaip sablono specifikacijos paskelbimas. Sablono specifikaciją sudaro raktinis zodis template, paskui kurį seka parametrų, įtrauktų į < > skliaustelius, sąrasas

.   &nbs 525j91f p;   &nbs 525j91f p; Turi tipo parametrus kurie zymimi raktiniu zodziu class, po kurio seka identifikatorius. Identifikatorius naudojamas tipo pavadinimo pakeitimui

.   &nbs 525j91f p;   &nbs 525j91f p; Automatiskai kompiliatorius isplečia iki pilno funkcijos aprasymo

.   &nbs 525j91f p;   &nbs 525j91f p; Gali būti perkrautos kitomis funkcijomis - sablonais


10.14. Klasių sablonai

.   &nbs 525j91f p;    Tai klasių apibrėzimai, naudojant specifikaciją template

.   &nbs 525j91f p;    Automatiskai juos kompiliatorius isplečia iki pilno klasių apibrėzimo, kaip reikalauja taisyklės

.   &nbs 525j91f p;    Negali būti įstatyti į kitas klases (skirtingai nuo įprastų klasių)

.   &nbs 525j91f p;    Gali keisti netipizuotus parametrus. Reiksmės, nurodytos siems parametrams, privalo būti konstantos

.   &nbs 525j91f p;    Gali būti isvesti is kaip is ne sabloninių klasių, taip ir is klasių sablonų

.   &nbs 525j91f p;    Is jų gali būti isvestos kaip ne sabloninės klasės, taip ir klasės sablonai


.   &nbs 525j91f p;   &nbs 525j91f p; Kai kuriems tipams gali būti perdengti tam, kad atlikt (arba neatlikti) kokius nors veiksmus, kuriuos klasių sablonai neatlieka

.   &nbs 525j91f p;   &nbs 525j91f p; Taip pat gali būti klasėmis-struktūromis arba klasėmis-apjungimais

class Stack <char *> ;

Statiniai duomenys- nariai

.   &nbs 525j91f p;   &nbs 525j91f p; Yra bendri duomenys visiems tam tikros klasės-sablono egzemplioriaus klasės objektams.

.   &nbs 525j91f p;   &nbs 525j91f p; Apibrėziami failo matomumo srityje, kuomet pries apibrėzimą naudojamas template

template <class T> class C ;

template <class T> int C <T>::i; // apibrėziame matomumo srityje

template <class T> int C <T>::t;

C <char> c;

C <float> f;

10.16. Funkcijų-narių sablonai

.   &nbs 525j91f p;    Apibrėziami uz klasių, kurioms priklauso, apibrėzimų ribų naudojant specifikatorių template

.   &nbs 525j91f p;    Apibrėztiems tipams gali būti perdengti, kad atlikti tam tikrus veiksmus, kuriuos metodų sablonai neatlieka

template <class T> void

Stack <T>::Push(const T& element)

Draugiskos funkcijos

.   &nbs 525j91f p;   &nbs 525j91f p; Kiekvienam T tipui gali būt visų T tipo klasių draugais. Tai įprastos draugiskos klasės

.   &nbs 525j91f p;   &nbs 525j91f p; T tipui gali būt T tipo klasės draugais

.   &nbs 525j91f p;   &nbs 525j91f p; Pries juos gali eiti specifikatorius template

.   &nbs 525j91f p;   &nbs 525j91f p; Gali būti kitos klasės funkcijomis- nariais

.   &nbs 525j91f p;   &nbs 525j91f p; Gali būti apibrėzti visai klasei

.   &nbs 525j91f p;   &nbs 525j91f p; Gali būti ne sabloninių klasių draugais

10.18. Operacijų perkrovimas

.   &nbs 525j91f p;   &nbs 525j91f p; Gali isplėsti iki klasės tipo bet kurių operacijų reiksmes, įskaitant :: , sizeof, ? :, ., *

.   &nbs 525j91f p;   &nbs 525j91f p; Atliekama deklaruojant funkciją, susidedančią is raktinio zodzio operator, po kurios seka viena is vidinių operacijų

.   &nbs 525j91f p;   &nbs 525j91f p; Nedaro jokių prielaidų apie tokias operacijas. Pvz: jeigu i yra int tipo, tai ++i yra tas pats, kas i=+1 ir i=i+1. Perkrautiems operatoriams tokios prielaidos nebegalioja tol, kol pats programuotojas jų atitinkamai neapibrėzia

.   &nbs 525j91f p;   &nbs 525j91f p; Negali naudoti argumentų pagal nutylėjimą

10.19. Unariniai operatoriai

.   &nbs 525j91f p;   &nbs 525j91f p;  Gali būti apibrėzti kaip nestatinės funkcijos-nariai, neturintys argumentų. Tai yra x interpretuojama kaip x.operator bet kuriam operatoriui

.   &nbs 525j91f p;   &nbs 525j91f p;  Gali būti apibrėzti kaip funkcijos, nesančios kokios nors klasės nariais, ir turinčios vieną argumentą

.   &nbs 525j91f p;   &nbs 525j91f p;  Sis argumentas yra tos klasės kintamasis arba nuoroda į tokį kintamąjį

.   &nbs 525j91f p;   &nbs 525j91f p;  Siuo atveju @x interpretuojama kaip operator@(x) bet kuriam operatoriui

11. XI-OJI PASKAITA

Operatorių perkrovimas. Polimorfizmas.

Unariniai operatoriai

Class X ;

class Y ;

Binarinės operacijos

.   &nbs 525j91f p;   &nbs 525j91f p; Gali būti deklaruotos kaip nestatinės funkcijos, kurios turi vieną argumentą. Tai yra uzrasas x@y interpretuojamas kaip x.operator@(y) bet kuriam operatoriui @.

.   &nbs 525j91f p;   &nbs 525j91f p; Gali b ti deklaruotos kaip funkcijos, nepriklausančios konkrečiai klasei ir turinčios vieną argumentą.

.   &nbs 525j91f p;   &nbs 525j91f p; Sis argumentas turi būti arba duotos klasės kintamuoju, arba nuoroda į tokį kintamąjį. Ta yra bet kuriai operacijai Įskaitant ir operaciją =, x@y interpretuojama kaip operator@(x,y)

.   &nbs 525j91f p;   &nbs 525j91f p;  Pvz:

class X ;

class Y ;

Operatorių perkrovimas


11.4. Funkcijos iskvietimo operacija

.   &nbs 525j91f p;    Turi būt paskelbta, kaip nestatinė klasės funkcija narys

.   &nbs 525j91f p;    Leidzia vartotojui nustatyti operandų kiekį

Class X ;

X Xample(1,2,3); // iskviečiamas konstruktorius

Xamople(4,5,6); // iskviečiama operacija ()

11.5. Priskyrimo operacija

.   &nbs 525j91f p;   &nbs 525j91f p; Naudojama vieno duotos klasės objekto reiksmės priskyrimui kitam objektui

.   &nbs 525j91f p;   &nbs 525j91f p; Jeigu vartotojas jos neapibrėzė, tai atlieka vieno klasės objekto laukų priskyrimą kitam objektui

.   &nbs 525j91f p;   &nbs 525j91f p; Turi būti apibrėzta, jeigu klasėje yra laukai, kurie yra rodikliai į dinamiskai isskirtas atminties sritis

.   &nbs 525j91f p;   &nbs 525j91f p; Tai tik operacijos funkcija, kuri nėra paveldima

.   &nbs 525j91f p;   &nbs 525j91f p; Turi būti apibrėzta, kaip nestatinė klasės funkcija - narys


11.6. Indeksavimo operacija

.   &nbs 525j91f p;   &nbs 525j91f p; Turi būti apibrėzta kaip nestatinė klasės funkcija- narys

.   &nbs 525j91f p;   &nbs 525j91f p; Dazniausiai grazina nuorodą, todėl ją galima naudoti priskyrimo operacijoje is abiejų operando pusių

class String

String ball=mitten";

ball[0]='k';

Priėjimo prie nario operacija

.   &nbs 525j91f p;   &nbs 525j91f p; X->m interpretuojama kaip (x.operator->())->m.

.   &nbs 525j91f p;   &nbs 525j91f p; Pastebima, kad tai unarinė operacija ir kad x - tai klasės objektas, o ne rodiklis į jį.

.   &nbs 525j91f p;   &nbs 525j91f p; Turi grazinti rodiklį į klasės objektą, arba patį klasės objektą, arba nuorodą į klasės objektą, kuriam si operacija yra priskirta, kadangi originali operacijos -> prasmė nėra prarandama, o tik uzlaikoma

.   &nbs 525j91f p;   &nbs 525j91f p; Turi būti apibrėzta, kaip nestatinė klasės funkcija - narys

11.8. Polimorfizmas

.   &nbs 525j91f p;   &nbs 525j91f p; Polimorfizmas isvertus is graikų kalbos reiskia daugiaformiskumas

.   &nbs 525j91f p;   &nbs 525j91f p; Tai paskutinė bazinė objektinio programavimo koncepcija

.   &nbs 525j91f p;   &nbs 525j91f p; Polimorfizmas objektiniame programavime suprantamas kaip objekto sugebėjimas sureaguoti į tam tikrą uzklausą priklausomai nuo savo tipo, netgi ir tuo atveju, kuomet kompiliacijos metu objekto, kuriam nukreipta uzklausa, tipas dar nėra zinomas.

.   &nbs 525j91f p;   &nbs 525j91f p; C++ kalboje polimorfizmo koncepcija realizuota naudojant virtualių funkcijų-narių mechanzmą

11.9. Virtualios funkcijos-nariai

.   &nbs 525j91f p;   &nbs 525j91f p; Jeigu kurioje nors klasėje yra funkcija, aprasyta kaip virtual, tai į tokią klasę kompiliatorius patalpina paslėptą narį - rodiklį į virtualių funkcijų lentelę.

.   &nbs 525j91f p;   &nbs 525j91f p; Taip pat sugeneruojamas specialus kodas, leidziantis parinkti virtualią funkciją, tinkančią duoto tipo objektui, programos vykdymo metu.

.   &nbs 525j91f p;   &nbs 525j91f p; Sis procesas įgijo vėlyvo surisimo pavadinimą (angl. late binding).

.   &nbs 525j91f p;   &nbs 525j91f p; Kita vertus virtualių funkcijų naudojimas lėtina programos veikimą ir didina klasės objektų dydį

.   &nbs 525j91f p;   &nbs 525j91f p; Jeigu kokia nors funkcija bazinėje klasėje apibrėzta kaip virtuali, tai funkcija tokiu pačiu pavadinimu, su tuo pačiu argumentų sąrasu ir tokio paties tipo grazinama reiksme, apibrėzta bazinėje klasėje, automatiskai tampa virtualia

.   &nbs 525j91f p;   &nbs 525j91f p; Negalima apibrėzti isvestinėje klasėje funkcijos, besiskiriančios tiktai grazinamos reiksmės tipu

.   &nbs 525j91f p;   &nbs 525j91f p; Virtuali funkcija savaime suprantama turi būti kokios nors klasės metodu, tačiau ji negali būti statiniu kokios nors klasės metodu.

.   &nbs 525j91f p;   &nbs 525j91f p; Isvestinėje klasėje galima apibrėzti funkciją su kitu besiskiriančiu argumentų sąrasu ir ji bus paprasta (nevirtuali) funkcija

class Base

Programavimas Windows aplinkai

.   &nbs 525j91f p;   &nbs 525j91f p;  Palyginus su Dos aplinkai parasytomis programomis, Wiindows programos pasizymi neįprastu veikimo principu

.   &nbs 525j91f p;   &nbs 525j91f p;  Funkcija WinMain gauna darbo pradzioje valdymą ir atlieka tam tikrus veiksmus, inicializuojančius programos langą

.   &nbs 525j91f p;   &nbs 525j91f p;  Po to si funkcija pereina į pranesimų apdorojimo rezimą (ciklą)

.   &nbs 525j91f p;   &nbs 525j91f p;  Isėjus is pranesimų apdorojimo ciklo programos darbas baigiamas

.   &nbs 525j91f p;   &nbs 525j91f p;  Funkcijos WndProc neiskviečia nė viena kita programos funkcija, nors būtent si funkcija atlieka visą naudingą vartotojo poziūriu darbą

#define STRICT

#include <windows.h>

//lango klases pavadinimas

char const szClassName[]="MyWindowsAppClass";

//lango pavadinimas

char const szWindowsTitle[]="MyWindowApplication";

Int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPSTR lpszCmdLine, int nCmdShow)

return msg.wParam; }

LRESULT WINAPI WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

case W_RBUTTONDOWN:

case WM_DESTROY:

}

return DefWindowProc(hwnd, msg, wParam, lParam);

11.11. Darbas su Windows sistemos meniu

.   &nbs 525j91f p;   &nbs 525j91f p; Beveik kiekviena Windows aplinkai parasyta programa turi meniu.

.   &nbs 525j91f p;   &nbs 525j91f p; Dazniausiai meniu kuriamas naudojant programos resursų failą ir resursų kompiliatorių

.   &nbs 525j91f p;   &nbs 525j91f p; Resursų failas turi plėtinį .rc

.   &nbs 525j91f p;   &nbs 525j91f p; Resursu faile gali buti ir kai kurie kiti programai reikalingi duomenys (pavyzdziui akseleratoriai, ikonėlės ir t.t.)

Programos fragmentas:

case WM_COMMAND:

{

switch(wParam) {

case CM_NEW:

..

// aprasomi reikalingi veiksmai

return 0;

case CM_UNDO:

...

// aprasomi Undo veiksma

return 0; // ir t.t. visi meniu

 
MY_MENU

nameID MENU

BEGIN

POPUP "&File"

BEGIN

MENUITEM "&New", CM_NEW

MENUITEM "&Open", CM_OPEN

MENUITEM "&Save", CM_SAVE

END

POPUP "&Edit"

BEGIN

MENUITEM "&Undo", CM_UNDO

MENUITEM "&Cut", CM_CUT

MENUITEM "&Paste", CM_PASTE

MENUITEM "&Copy", CM_COPY

END

END

MENUITEM SEPARATOR




Document Info


Accesari: 2607
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )