|
1 – dars. C++ Dasturlash tilining kelib chiqishi xaqida ma’lumot
|
bet | 80/89 | Sana | 16.11.2023 | Hajmi | 313,45 Kb. | | #100010 |
Bog'liq @AKT Official C haqida o\'zbekcha darslar majmui76 - DARS. SINFLAR VA SHABLONLAR.
Shablonli funktsiyalar va sinflar oilasini yaratishga imkon beradi.Shablalar sinfiy yoki parametrlangan tillar deb ham ataladi. Yuqorida ko’rsatilganidek funktsiyalar oilasi shabloni cheksiz ko’p o’zaro yaqin funktsiyalarni aniqlashga imkon beradi va qo’yidagiga ega bo’ladi:
templatef-ya tarifi.
Sinf ta'rifiga tushuvchi kam,butun bir sinflar oilasi nomi bulib hizmat qiladi.Shablon tarifi faqat global bo’lishi mumkin. Shablon kiritilgandan so’ng sinflar obe’ktlari qo’yidagicha ta'riflananadi; parametrlangan sinf nomi obe’kt-nomi(konstruktor parametrlari);
STT tili avtorlariga muvofiq vektorli sinfli ko’rib chiqamiz. Ventar elementlari qanday tipga tegishli bo’lmasin ular ustida bir hil amallar aniqlanishi mumkin. Kutbidagi shablon kerakli hossalarga ega bo’lgan ventorlar sinflarini avtomatik yaratishga imkon beradi.
||Template.vec
template
clarr vector
{T data;
int size;
public;
vector(int);
~Vector(){delete[]data;};
T&aperator[](int i){return data[i];}
};
templote
vector::Vector(int n)
{data=new t[n];
size=n;
};
Qo’yidagi dasturda shu shablan asosida konkret butun sonli va simvolli vektorlarni tushuntirib ko’rib chiqamiz:
# include “template.vec”
#include
main()
{Vectox(5);
Vectorx(5);
For(int I=0;i<5;I++)
{x[i]=I;c[i]=’A’+I;}
for(I=0;I<5;I++)
{x[i]=I;c[I]=’A’+I;}
for(I=0;I<5;I++)
cont<<” “<}
77 - DARS. SHABLON YARATISH.
Misol uchun massiv sinfi yaratilib bu sinfda massivning summasini va o’rta qiymatini hisoblash usullari mavjud bo’lsin. Agar siz int tipida gi massiv bilan ishlayotgan bo’lsangiz sinf ta'rifi qo’yidagicha bo’lishi mumkin:
class array
{
public:
array(int size);
long sum(void);
int average_value(void);
void show_array(void);
int add_value(int);
private:
int *data;
int size;
int index;
};
Qo’yidagi I_ARRAY.CPP dasturda array sinfidan int tipidagi massivlar bilan ishlash uchun foydalanilgan.
#include
#include
class array
{
public:
array(int size);
long sum(void);
int average_value(void);
void show_array(void);
int add_value(int) ;
private:
int *data;
int size;
int index;
};
array::array(int size)
{
data = new int [size];
if (data == NULL)
{
cerr << "Nedostatochno pamyati - programma zavershaetsya " << endl;
exit(l);
}
array:: size = size;
array::index = 0;
}
long array::sum(void)
{
long sum = 0;
for (int i = 0; i < index; i++) sum += data[i];
return(sum);
}
int array::average_value(void)
{
long sum = 0;
for (int i = 0; i < index; i++) sum += data[i];
return (sum / index);
}
void array::show_array(void)
{
for (int i = 0; i < index; i++) cout << data[i] << ' ';
cout << endl;
}
int array::add_value(int value)
{
if (index == size) return(-1); // massiv polon
else
{
data[index] = value;
index++;
return(0); // uspeshno
}
}
void main(void)
{
array numbers (100); // massiv iz 100 el-tov
int i;
for (i = 0; i < 50; i++) numbers.add_value(i);
numbers.show_array();
cout << "Summa chisel ravna " << numbers.sum () << endl;
cout << "Srednee znachenie ravno " << numbers.average_value() << endl;
}
Dasturda avval massiv 100 elementi taqsimlanadi. So’ngra massivga 50 qiymat add_value. Usuli yordamida yoziladi. Qo’yidagi array sinfida index o’zgaruvchisida massivda saqlanuvchi elementlar soni yoziladi. Agar massiv sig’dirishi mumkin bo’lgan elementlar sonidan ortiq elemetlar yozishga urinilsa add_value funktsiyasi hato haqida ma'lumot qaytaradi. Ko’rinib turibdiki average_value funktsiyasi index o’zgaruvchisidan massiv elementlari soni o’rta qiymatini aniqlashda foydalaniladi. Dastur new operatoridan foydalanilgan.
Agar dasturda haqiqiy qiymatli massivlar binoan ishlash zarur bulsa Yangi sinf yaratishga to’g’ri keladi. Sinflarni kupaytirmaslik uchun sinflar shablonlaridan foydalanish mumkin. Qo’yida umumiy array sinfi shabloni keltirilgagn:
template class array
{
public:
array(int size);
T1 sum (void);
T average_value(void);
void show_array(void);
int add_value(T);
private:
T *data;
int size;
int index;
};
|
| |