Скачиваний:
0
Добавлен:
19.02.2024
Размер:
374.56 Кб
Скачать

1-ÁMELIY SABAQ. SHABLON (TEMPLATE) TÚSINIGI HÁM

OLARDÍŃ QOLLANÍLÍWÍ. DIALOG AYNALARI MENEN ISLEW.

Jumıstıń maqseti: C++ programmalastırıw tilinde shablonlar hám olardıń qollanılıwdı úyreniw. Dialog aynalar menen islew.

Teoriyalıq bólim:

Shablonlar - universal programmalastırıw ushın tıykar bolıp tabıladı. Kúshli tiplengen til retinde C++ barlıq ózgeriwshiler baǵdarlamashı tárepinen anıq járiyalanǵan yamasa kompilyator tárepinen shıǵarılǵan belgili bir túrge iyelewin talap etedi. Biraq, kóplegen maǵlıwmatlar strukturaları hám algoritmleri olar isleytuǵın tipine qaramastan birdey kórinedi. Shablonlar klass yamasa funkciya operatsiyaların anıqlaw imkaniyatın beredi hám paydalanıwshıǵa bul operatsiyalardıń qaysı túrleriniń islew kerekligin belgilew imkaniyatına iye.

Funkciya shablonları

Funkciya shablonı (parametrlengen tipler) baylanısqan funkciyalar shańaraǵın dúziw imkaniyatına iye. Shablon kiritiliwi ushın, payda etilgen funkciyanı avtomatlastırıw, hár túrli tipli maǵlıwmatlardı qayta islewden ibarat. Mısalı, algoritmdi tártiplestiriw ushın hár qaysı funkciyanıń ózin anıqlawshı tipi qollanıladı.

Klass shablonları

Klass shablonları (ózgeshe parametrlengen klass) áwladqa tiyisli klastı dúziw ushın qollanıladı. Dúziw qaǵıydalardı hám ayırım obyektlerdiń formatın anıqlawshı klass sıyaqlı, klass shablonları ayırım klasslardı dúziw usılların anıqlaydı. Shablondaǵı klass táriypinde klass atı ayırım klasslarǵa tiyisli emes shańaraqqa, klasslardıń parametrlengen atı boladı.

Parametrlengen klastı járiyalawdıń ulıwma forması : template <class maǵlıwmat_tipi> class klass_atı { . . . };

ÁMELIY BÓLIM:

C++ te shablonlar tildiń kúshli imkaniyatı bolıp tabıladı, ol bizge ulıwma baǵdarlamalar jazıwǵa imkaniyat beredi. Shablonlardı iske túsiriwdiń eki usılı bar:

1)Funkciya shablonları;

2)Klass shablonları.

Funkciya shablonlarına uqsas, biz hár túrli maǵlıwmatlar tipleri menen jumıs islew islew ushın bir klastı dúziwde, klass shablonların paydalanamız. Klass shablonları qolaylı, óytkeni olar biziń kodtı qısqartıp, basqarıwǵa qolaylı qıladı.

Klass shablonlarınıń járiyalanıwı

Klass shablonı template gilt sózinen baslanadı, onnan keyin ishindegi shablon parametrleri bar <>, al sonnan keyin klass málimlemesin óz ishine aladı.

template <class T> class className {

private: T var;

... .. ...

public:

T functionName(T arg);

... .. ...

};

Joqarıdaǵı járiyalanıwda T shablon argumenti bolıp tabıladı, ol paydalanatuǵın maǵlıwmatlar tipi ushın tolıqlawısh bolıp tabıladı, hám class gilt sózi menen. Klass denesiniń ishindegi aǵza ózgeriwshi var, hám aǵza funkciyasınıń functionName() ekewide T tipli.

Klass shablonın dúziw

Biz klass shablonın járiyalap, anıqlanǵannan keyin onıń obyektlerin keyingi sintaksis penen basqa klaslarda yamasa funkciyalarda (mısalı, funkciya) isley alamız: main()

className<dataType> classObject;

Mısalı,

className<int> classObject; className<float> classObject; className<string> classObject;

1-mısal: C++ klasınıń shablonları

Programma kodı

 

Nátiyjesi

// C++ program to demonstrate the use

of class

/tmp/o8kli0rEb8.o

templates

 

int Number = 7

#include <iostream>

 

double Number = 7.7

 

 

using namespace std;

 

 

// Class template

 

 

template <class T>

 

 

class Number {

 

 

private:

 

 

// Variable of type T T num;

public:

Number(T n) : num(n) {} // constructor

T getNum() { return num;

}

};

int main() {

//create object with int type Number<int> numberInt(7);

//create object with double type Number<double> numberDouble(7.7);

cout << "int Number = " << numberInt.getNum() << endl;

cout << "double Number = " << numberDouble.getNum() << endl;

return 0;

}

Kodtıń orınlanıw kórinisı:

Bul baǵdarlamada Number kod penen klas shablonın dúzdik;

template <class T>

class Number {

private:

T num;

public:

Number(T n) : num(n) {}

T getNum() { return num; }

};

num ózgeriwshi ekenin este saqlań, n konstruktor argumenti, hám getNum() funkciyasınıń T tipi, yamasa T tipin qaytaradı. Bul olardıń qálegen tipi bolıwı múmkin degendi bildiredi.

Biz main() obyektlerin dúziw arqalı klass shablonın ámelge asırdıq;

Number<int> numberInt(7);

Number<double> numberDouble(7.7);

Joqarıdaǵı Number<int> hám Number<double> kodlarǵa itibar beriń. Bular int hám float hárqaysısı ushın klass anıqlamasın dúzedi, sonnan keyin olar sáykesinshe paydalanıladı.

Klass shablonlarınıń obyektlerin járiyalaw gezinde tipti kórsetiw jaqsı tájiriybe bolıp tabıladı. Bolmasa, ayırım kompilyatorlar qáte jiberiwi múmkin.

//Error

Number numberInt(7);

Number numberDouble(7.7);

2-mısal: Klass shablonların paydalanatuǵın ápiwayı kalkulyator dúziw.

Bul baǵdarlama eki num1 hám num2 ózgeriwshini qosıw, alıw, kóbeytiw hám bóliwdi orınlaw ushın klass shablonı paydalanıladı.

ozgeriwshiler hár qanday tipke iye bolıwı múmkin, degen menen biz tek usı mısalda qollanılǵan int hám float tiplerin qollanamız.

 

Programma kodı

 

 

Nátiyjesi

 

#include <iostream>

 

 

/tmp/kBPWRla4Pw.o

 

using namespace std;

 

 

Int results:

 

template <class T>

 

 

Numbers: 2 and 1.

 

 

2

+ 1 = 3

 

class Calculator {

 

 

 

2

- 1 = 1

 

 

private:

 

 

 

 

2

* 1 = 2

 

 

T num1, num2;

 

 

 

 

2

/ 1 = 2

 

 

 

 

 

 

public:

 

 

Float results:

 

 

Calculator(T n1, T n2) {

 

 

 

 

num1 = n1;

 

 

Numbers: 2.4 and 1.2.

 

num2 = n2;

2.4 + 1.2 = 3.6

}

2.4 - 1.2 = 1.2

void displayResult() {

2.4 * 1.2 = 2.88

2.4 / 1.2 = 2

cout << "Numbers: " << num1 << " and " << num2

<< "." << endl;

 

cout << num1 << " + " << num2 << " = " << add()

 

<< endl;

 

cout << num1 << " - " << num2 << " = " <<

 

subtract() << endl;

 

cout << num1 << " * " << num2 << " = " <<

 

multiply() << endl;

 

cout << num1 << " / " << num2 << " = " <<

 

divide() << endl;

 

}

 

T add() { return num1 + num2; }

 

T subtract() { return num1 - num2; }

 

T multiply() { return num1 * num2; }

 

T divide() { return num1 / num2; }

 

};

 

int main() {

 

Calculator<int> intCalc(2, 1);

 

Calculator<float> floatCalc(2.4, 1.2);

 

cout << "Int results:" << endl;

 

intCalc.displayResult();

 

cout << endl

 

<< "Float results:" << endl;

 

floatCalc.displayResult();

 

return 0;

 

}

 

Kodtıń orınlanıw kórinisi:

Shıǵıwshı nátiyjeler:

Int results: Numbers: 2 and 1. 2 + 1 = 3 2 - 1 = 1 2 * 1 = 2 2 / 1 = 2

Float results: Numbers: 2.4 and 1.2. 2.4 + 1.2 = 3.6 2.4 - 1.2 = 1.2 2.4 * 1.2 = 2.88 2.4 / 1.2 = 2

Joqarıdaǵı baǵdarlamada biz calculator klass shablonın járiyaladıq. Klasta eki T tiptegi num1 & num2 aǵza bar, hám aǵzalardı inicializaciyalaw ushın konstruktor. Bizde sonday-aq add(), subtract(), multiply(), hám divide() qaytarıw tipi hám funkciyaları bar. Bizde void funkciyasınıń nátiyjelerin basıp shıǵaratuǵın

displayResult() funkciyada bar. Biz main() niń ishinde Calculator eki obyektti dúzdik: birewi int maǵlıwmatlar tipi ushın, ekinshisi float maǵlıwmatlar tipi ushın.

Calculator<int> intCalc(2, 1);

Calculator<float> floatCalc(2.4, 1.2);

Bul kompilyatordı kompilyaciya barısında sáykes maǵlıwmatlar tipleri ushın eki klass anıqlamasın dúziwge shaqıradı.