Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Fayla yazmaq və fayldan oxumaq




Informasiya fayla onun ekrana çıxarılması üçün istifadə olunan << - ardıcıl çıxarma operatoru vasitəsilə yazılır. Bu zaman yeganə fərq ondan ibarətdir ki, cout obyekti və ya fstream obyekti istifadə olunur.

Informasiyanı fayldan proqrama daxil etmək üçün onun kla­viaturadan daxil edilməsi üçün istifadə olunan >> - ardıcıl da­xil etmə operatoru istifadə olunur. Yeganə fərq ondan iba­rət­dir ki, cin obyekti əvəzinə ifstream və ya fstream obyekti istifadə olunur.

 

Misal 9.2. Aşağıdakı proqram informasiyanı telebe.dat fay­­­lı­na yazır, proqram onu fayldan oxuyur və onu ekrana çı­xa­­­rır.

 

#include <fstream>

#include <iostream>

using namespace std;

int main()

{

char data[50];

ofstream outfile;

outfile.open("telebe.dat");

cout<<"writing to the file"<<endl;

cout<<"enter class name:";

cin.getline(data,50);

outfile<<data<<endl;

cout<<"enter number of telebe";

cin>>data;

cin.ignore();

outfile<<data<<endl;

outfile.close();

ifstream infile;

cout<<"reading from file"<<endl;

infile.open("telebe.dat");

infile>>data;

cout<<data<<endl;

infile.close();

getchar();

return 0;

}

Strukturlar və siniflər

10.1. Strukturlar və onların elanı

Obyektyönlü proqramlaşdırmada struktur və sinif anla­yı­ş­la­rın­­dan çox tez-tez istifadə olunur.

Obyektləri bir dəyişənlə təsvir etmək üçün onlar çox mü­rək­kəb­dirlər. Massiv çoxlu sayda dəyişən saxlaya bilər, la­kin massivdə bü­tün dəyişənlər eyni tip verilən olmalıdır.

Obyektlərdə qiymətlər verilənlərin bir tipi ilə məhdud­lan­mır. Məsələn, tələbə dedikdə burada hər hansı ümumi xarak­te­­ri­sti­kalar olur - onların adları, topladığı ballar, boyları, oxu­duqları fakültə və s. Onlardan hər birinin qiymətini dəyişəndə sax­la­maq olar. Lakin bu dəyişənlərin müxtəlif tip verilənləri olur. Boy tam ədəd kimi saxlana bilər, ad isə C – sətir tip də­yi­şən və ya C++ sətir sinfi kimi saxlana bilər.

Ad və boy dəyişənləri bir –biri ilə onunla əlaqəlidirlər ki, onlar bir adamın müxtəlif xarakteristikalarını təsvir edirlər. Lakin onları

string name

int height;

kimi elan etsək, onlar bir-biri ilə əlaqəli olmayacaq və sadəcə ola­raq, iki müxtəlif dəyişənlər olacaqlar.

C++ dili bir –biri ilə əlaqəli olan dəyişənləri bir strukturda birləşdirməyə imkan verir. Struktur – bir neçə müxtəlif tip verilənlərdən ibarət dəyişənlərə malik ola bilər.

Mahiyyət etibarilə struktur – verilənlər tipidir. Lakin bu C++ -­da­kı adi int və ya C–sətir tipləri deyil. Həqiqətdə bu proq­ramçı tərəfindən təyin edilən verilənlər tipidir. Ona görə onu elan etmək lazımdır ki, kompilyator onun nə olduğunu ba­şa düşsün. Məsələn,

struct telebe{

string name;

int height;

};

kod fraqmentində adı və boyu ilə xarakterizə olunan struktur elan olunub. Burada struct – xidməti sözdür və elan onunla baş­layır. Telebe – sttrukturun adıdır (ixtiyari seçilir). Açılan və bağlanan sistem mötərizələri strukturun gövdəsini təyin edir. Lakin burada funksiyadan fərqli olaraq bağlanan mötərizədən sonra “; “ işarəsi qoyulur.

Bir-biri ilə əlaqəli dəyişənlər stukturun gövdəsində elan olu­nur­lar və hər bir belə dəyişən nümunə dəyişəni adlanır. Struk­tur­da nümunənin çoxlu sayda dəyişənləri ola bilər. Həmçinin bir struk­turun dəyişəni digər struktur nümunəsinin dəyişəni ola bi­lər.

Strukturu kodun istənilən yerində elan etmək olar. Lakin şərt­­ləşməyə əsasən, o adətən preprosessorun direktivindən sonra aşagıdakı kimi elan olunur:

Misal 10.1.

# include <iostream>

#include <string>

using namespace std;

struct Telebe {

string name;

int height;

};

int main()

{

// kod

return 0;

}

Qeyd. Strukturu elan edərkən biz dəyişən elan etmirik, biz veri­lənin tipini elan edirik. Verilənin tipini qlobal elan edərək, biz bu tipi proqramın istənilən yerində istifadə edə bilərik. Də­­yi­­şənləri qlobal etməyə lazım olmayan səbəblər veri­lən­lə­rin ti­pi­nin elan olunmasına uyğun gəlmir. Məsələn, Telebe struk­­tu­ru­na qiymət mənimsətmək olmaz, lakin int tipli dəyi­şə­nə qiy­mət mənimsətmək olar. Bunun əvəzinə strukturun də­yi­şə­n­lərini elan etmək lazımdır.

 

10.2. Strukturun dəyişəninin elanı

 

“Adam” ümumiyyətlə - Person strukturudur. Hər bir ayrıca gö­türülmüş adam Person strukturunun nümunəsidir, ona görə də hər bir belə nümunə Person struktur tipinin dəyişəni ki­mi elan olunmalıdır.

Struktur tipinin dəyişəni standart tiplər kimi elan olunur. Məsələn, Person P1;

Hətta Person tip bir neçə dəyişəni də elan etmək olar;

Person P1, P2, P3;

Bunun üçün Person tip dəyişənlər massivi də elan etmək olar:

Person[50];

Struktur tip dəyişəni proqramın istənilən yerində elan et­mək olar, onun görünmə oblastı və varlıq zamanı qaydası tam­­­qiy­mətli və kəsr dəyişənlərə və ya başqa dəyişənlərə olan tə­sir­lə eyni­dir.

Struktur tip dəyişənin elanı onun qiymətini nümunənin də­yi­­şə­­ninə mənimsətmir. Nümunənin dəyişəninə struktur dəyi­şə­ni­nin adına görə müraciət etmək olar.

Aşağıdakı kod “Akademiya” qiymətini P1 strukturunun name nümunəsinin dəyişəninə mənimsədir:

P1.name=”Akademiya”;

Bu qayda ilə nümunənin dəyişəninin qiymətini ekrana çıxar­maq olar:

cout<<”The name of P1 is”<<P1.name;

Strukturun dəyişəninin adının əvəzinə strukturun adının istifadə olunması yolverilməzdir:

Person.name=Akademiya;//bu işləməyəcək!

10.3. Strukturun inisiallaşdırılması

Strukturu iki üsulla inisiallaşdırmaq olar: 1) inisi­al­laş­dır­ma si­ya­hısından istifadə etməklə; 2) konstruktorla.

Aşağıdakı kod fraqmentində inisiallaşdırma siyahısından istifadə etməklə strukturun necə inisiallaşdırılması verilir:

Person P1={“Telebe”, 111};

Bu tamamilə massivin inisiallaşdırılmasına analojidir. La­kin burada mühüm fərq ondan ibarətdir ki, massivin bütün ele­mentləri eyni tip olduqları halda, struktur nümunəsinin də­yi­şən­ləri müxtəlif tip ola bilərlər. Ona görə də inisiallaşdırmada ardıcıllıq mühüm rol oynayır. Məsələn,

Person P1={111, “Telebe”}

kodu səhvdir, çünki, struktur nümunəsinin birinci dəyişəni c – sətirdir, ona görə də ona tam qiymət mənimsətmək olmaz.

Konstruktor – obyektə istinad edərkən avtomatik çağrılan funksiyadır.

Konstruktorlar üç növ olurlar:

1) Susmaya görə konstruktorlar,

2) Parametrsiz konstruktorlar,

3) Parametrli konstruktorlar.

Aşağıdakı proqramda susmaya görə konstruktorun istifadə olun­ması göstərilir:

 

Misal 10.2.

#include <iostream>

#include <string>

using namespace std;

struct Person {

string name;

int height;

};

int main()

{

Person P1;

cout<<"The person's name is "<<P1.name<<" and height is "<<P1.height<<endl;

return 0;

}

 

Burada susmaya görə konstruktor Person nümunəsinin ya­rat­­dığı

Person P1;

operatoru vasitəsilə çağrılır. Nəticədə alınır ki, Person nümunəsi susmaya görə konstruktorla yaradılmışdır. Bununla belə, nümunə­­nin dəyişənlərinə qiymət mənimsədilməyib. Ona görə də nümunənin name dəyişəninin adı boş sətir, nümunənin dəyişəninin qiy­məti isə “zibil” qiymətdir.

Parametrsiz konstruktorlar – susmaya görə konstruktordan fərqli olaraq nümunənin dəyişənlərinə susmaya görə qiymət mə­nimsədirlər. Aşağıdakı kodda Person strukturunun göv­də­si­nə parametrsiz konstruktor əlavə olunması gös­tə­ril­miş­dir:

Misal 10.3.

struct Person {

string name;

int height;

Person ()

{

name=”no name assigned”; konstruktor

height= - 1;

}

};

Konstruktorun adı strukturun özünün adı kimi olur. Bundan başqa, konstruktorda qaytarılan qiymətlər yoxdur. Bu para­metr­siz konstruktor da susmaya görə konstruktor kimi Person P1; operatoru ilə çağrılır. Parametrsiz kon­struk­tor çağrılmasına baxmayaraq, P1 – dən sonra boş mötərizə yoxdur, ona görə ki, bu funksiyanın çağrılması deyil, yalnız dəyişənin elanıdır.

Parametrli konstruktorlar. Susmaya görə konstruk­tor­lar­dan parametrsiz konstruktorların elanı daha yaxşıdır, ona gö­rə ki, nümunənin dəyişənlərinə indi susmaya görə qiymət mə­nim­sə­di­lir­lər. Lakin əgər proqramın işləməsi zamanı inisial­laş­dır­saq vəziyyəti daha da yaxşılaşdırmaq olar. Bu isə o halda müm­­kün olur ki, konstruktora nümunənin dəyişənlərini inisial­laşdırmaq üçün istifadə olunan parametrlər əlavə olun­sun. Məsə­lən,

Person(string s, int h)

{

name=s;

height=h;

}

Iki parametrli konstruktor aşağıdakı Person nümunəsinin elan olunması ilə çağrılır:

Person P1(strName, centimeters);

Burada mötərizələr lazımdır, çünki parametrlər var. Para­metr­lər konstruktorun onları gözlədiyi ardıcıllıqda dayan­ma­lı­dır­lar. Məsələn, əgər konstruktor birinci parametrin sətir, ikin­ci­nin isə tam ədəd olduğunu gözləyirsə, onda birinci parametri tam ədəd, ikincisi isə sətir olan Person nümunəsi elan olu­nar­sa nə­ti­cə səhv olacaq.

 

 





Поделиться с друзьями:


Дата добавления: 2017-01-21; Мы поможем в написании ваших работ!; просмотров: 459 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Люди избавились бы от половины своих неприятностей, если бы договорились о значении слов. © Рене Декарт
==> читать все изречения...

2444 - | 2243 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.