Шаблоны Жалпыланған функцияларды қайта жүктеу



Дата13.05.2020
өлшемі94,09 Kb.
#67991
Байланысты:
сессия


Орынбасарова Ақбөбек(18-1)Мкм

Шаблоны

Жалпыланған функцияларды қайта жүктеу

Шындыққа жетудің ең басты жолы - заттарды шын мәнінде білу және оларды үйреткендей қорытынды жасамау.

Д.Локк

Жалпы функциялар үшін сіз нақты жүктеме жасай аласыз, оны арнайы мамандандыру деп те атайды. Жалпыланған функция нақты жүктелгенде, дәлелдердің типтері мен функция нәтижесін нақты көрсете отырып, осы функцияның жеке нұсқасы жасалады. Функцияның нақты мамандануы, әдетте, жалпыландырылмаған, функцияның стандартты сипаттамасы болып табылады.



Мысал: #include

using namespace std;

//Обобщенная функция:

template void change(X &a,X &b)

{

X t;


t=a;

a=b;


b=t;

}

//Явная специализация обобщенной функции:



void change(int &a,int &b)

{

int t;



t=a;

a=b+1;


b=t+1;

}

int main(){



double x=2.3,y=4.5;

int m=6,n=8;

//Шакыру обобщенной функции:

change(x,y);

cout<<"x = "<

cout<<"y = "<

change(m,n);

cout<<"m = "<

cout<<"n = "<

Жалпы функцияның өзгеруінде () сілтеме арқылы берілетін бірдей типтегі екі аргумент бар. Функция нәтижесінде функцияның дәлелдерінің құндылықтарымен алмасу бар. Бұл int типіндегі аргументтерден басқа барлық түрдегі аргументтер үшін болады. Бұл жағдайда бағдарлама өзгерту () функциясының нақты мамандануын жасады. Дәлел мәндерінің

ғана емес, сонымен бірге бұл мәндер де бір-біріне артады. Сондықтан бағдарламаның нәтижесінде келесі нәтижеге қол жеткіземіз:

x = 4.5


y = 2.3

m=9


n=7

Осылайша, жалпыланған функцияны шақырған кезде бірдей алгоритм барлық жағдайларда орындалады, функцияның дәлелдері int типіне жататын жағдайларды қоспағанда. Осыған байланысты жалпыланған функцияның нақты мамандануы ережеге ерекше жағдай жасауға мүмкіндік береді - бұл жағдайда ереже жалпыланған функцияның негізгі нұсқасы болып табылады.



Моя задача:

#include

using namespace std;

int sumElements(int arrI[], int size);

double sumElements(double arrD[], int size);

double sumElements(int arrI[], double arrD[], int size);

int main()

{

setlocale(LC_ALL, "rus");



const int Size = 5;

int ArrInt[Size] {100, 200, 300, 400, 500};

double ArrDouble[Size] {100.1, 200.2, 300.3, 400.4, 500.5};

cout << "Элемент суммасы типа int = ";

cout << sumElements(ArrInt, Size);

cout << endl << endl;

cout << "Элемент суммасы типа double = ";

cout << sumElements(ArrDouble, Size);

cout << endl << endl;

cout << "Элемент суммасы обоих типов = ";

cout << sumElements(ArrInt, ArrDouble, Size);

cout << endl << endl;

return 0;

}

int sumElements(int arrI[], int size)



{

int sumElArr = 0;

for (int i = 0; i < size; i++)

{

sumElArr += arrI[i];



}

return sumElArr;

}

double sumElements(double arrD[], int size)



{

double sumElArr = 0;

for (int i = 0; i < size; i++)

{

sumElArr += arrD[i];



}

return sumElArr;

}

double sumElements(int arrI[], double arrD[], int size)



{

double sumElArr = 0;

for (int i = 0; i < size; i++)

{

sumElArr += arrI[i];



sumElArr += arrD[i];

}


return sumElArr;

}




Достарыңызбен бөлісу:




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет