Saturday, January 28, 2023

சி++-ல் டெம்ப்லேட்ஸ்.

 


 To learn more about  c, c++, java, c#, vb.net, asp.net, asp.net core, javascript, angular, react js, web designing, fullstack web development , python , php, my sql, sql server ,ms-office, tally contact:

919629329142

both direct and on line coaching available.

visit youtube channel "programming with karthikeyan" for learn programming concepts in Tamil. please don't forget to subscribe to that channel.

 

டெம்ப்லேட்ஸ் ஆனது சி++-ல் எளிய அதே நேரத்தில் சக்தி வாய்ந்த டூல் ஆகும்.ஒரே கோடை வெவ்வேறு விதமான டேட்டா டைப்பிற்கு இயக்கலா.அதற்கு டேட்டா டைப்பை பாராமீட்டராக அனுப்ப வேண்டும்.

சான்றாக sort() ஃபங்க்சன் ஆனது வெவ்வேறு டேட்டா டைப்பிற்கு பயன்படுத்தலாம்.எளிதாக டேட்டாடைப்பை பாராமீட்டராக அனுப்புவதன் மூலம் இதனை சாதிக்கலாம்.

சி++-ல் டெம்ப்லேட்ஸ் கான்செப்டிற்கு இரண்டு கீ வேர்டுகள்  பயன்படுகின்றன.

அவையாவன:

1.      templates

2.      typename

இவற்றில் typename என்பதற்கு பதில் class என்ற கீவேர்டையும் பயன்படுத்தலாம்.

டெம்ப்லேட்ஸ் எவ்வாறு பயன்படுகின்றது.

டெம்ப்லேட்ஸ் ஆனது கம்பைல் டைமில் எக்ஸ்பேண்ட் செய்யப்படுகின்றது.இது macroவை ஒத்திருக்கின்றது.ஒரு வித்தியாசம் என்னவெனில் கம்பைலரானது டெம்ப்லேட்ஃப்டை எக்ஸ்பேண்ட் செய்யும் பொழுது டைப் செக் செய்யும்.திட்டம் என்னவெனில் ஒரே ஒரு ஃபங்க்சனோ அல்லது கிளாஸோ வைத்துக்கொண்டு மல்டிபிள் டேட்டாடைப்பிற்கு ரியூஸ் செய்தல் ஆகும்.


 


 

ஃபங்க்சன் டெம்ப்லேட்ஸ்.

ஒரு ஃபங்க்சனை டெம்ப்லேட் ஆக எழுதி வைத்துக் கொண்டு வெவ்வேறு டேட்டா டைப்பிற்க்கு அவற்றை ரியூஸ் செய்தல் ஆகும்.

சான்று நிரல்-1

#include <iostream>

using namespace std;

 

// One function works for all data types.  This would work

// even for user defined types if operator '>' is overloaded

template <typename T>

T myMax(T x, T y)

{

   return (x > y)? x: y;

}

 

int main()

{

  cout << myMax<int>(3, 7) << endl;  // Call myMax for int

  cout << myMax<double>(3.0, 7.0) << endl; // call myMax for double

  cout << myMax<char>('g', 'e') << endl;   // call myMax for char

 

  return 0;

}

வெளியீடு:

7

7

g

 

கீழே உள்ள நிரல் பப்பிள் சார்ட் செய்வதற்கான கோடிங்க் ஆகும்.

சான்று நிரல்-2.

/ CPP code for bubble sort

// using template function

#include <iostream>

using namespace std;

  

// A template function to implement bubble sort.

// We can use this for any data type that supports

// comparison operator < and swap works for it.

template <class T>

void bubbleSort(T a[], int n) {

    for (int i = 0; i < n - 1; i++)

        for (int j = n - 1; i < j; j--)

            if (a[j] < a[j - 1])

              swap(a[j], a[j - 1]);

}

  

// Driver Code

int main() {

    int a[5] = {10, 50, 30, 40, 20};

    int n = sizeof(a) / sizeof(a[0]);

  

    // calls template function

    bubbleSort<int>(a, n);

  

    cout << " Sorted array : ";

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

        cout << a[i] << " ";

    cout << endl;

  

  return 0;

}

Output
 

Sorted array : 10 20 30 40 50

 

கிளாஸ் டெம்ப்லேட்ஸ்.

இதுவும் ஃபங்க்சன் டெம்ப்லேட்டை ஒத்திருக்கின்றது. ஒரு கிளாசின் மெம்பர்களின் டேட்டா டைப் குறிப்பிடாமல் டெம்ப்லேட் ஆக எழுதி வைத்துக்கொண்டு அவற்றை மல்டிபிள் டேட்டா டைப்பிற்க்கு பயன்படுத்துதல் ஆகும்.

உதாரணம் linked list,stack,queue,array போன்ற கிளாஸ்கள் ஆகும்.

சான்று நிரல்-3.

#include <iostream>

using namespace std;

 

template <typename T>

class Array {

private:

    T *ptr;

    int size;

public:

    Array(T arr[], int s);

    void print();

};

 

template <typename T>

Array<T>::Array(T arr[], int s) {

    ptr = new T[s];

    size = s;

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

        ptr[i] = arr[i];

}

 

template <typename T>

void Array<T>::print() {

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

        cout<<" "<<*(ptr + i);

    cout<<endl;

}

 

int main() {

    int arr[5] = {1, 2, 3, 4, 5};

    Array<int> a(arr, 5);

    a.print();

    return 0;

}

Output: 

 1 2 3 4 5

ஒரு டெம்ப்லேட்டிற்க்கு மல்டிபிள் ஆர்க்கியூமென்டை அனுப்பலாமா?

ஆம் ஒரு டெம்ப்லேட்டிற்கு ஒன்றுக்,கு மேற்பட்ட டைப்பை பாராமீட்டராக அனுப்பலாம்.

சான்று நிரல்-4.

#include<iostream>

using namespace std;

 

template<class T, class U>

class A  {

    T x;

    U y;

public:

    A() {    cout<<"Constructor Called"<<endl;   }

};

 

int main()  {

   A<char, char> a;

   A<int, double> b;

   return 0;

}

Output: 

Constructor Called

Constructor Called

டெம்ப்லெட் ஆர்க்கியூமெண்டிற்கு டிஃபால்ட் மதிப்பிருத்த முடியுமா?

ஆம் ஃபங்க்சன் பாராமீட்டர்களுக்கு டிஃபால்ட் மதிபிருத்துவது போல் டெம்ப்லேடிற்கும் டிஃபால்ட் மதிப்பிருத்தலாம்.

#include<iostream>

using namespace std;

 

template<class T, class U = char>

class A  {

public:

    T x;

    U y;

    A() {   cout<<"Constructor Called"<<endl;   }

};

 

int main()  {

   A<char> a;  // This will call A<char, char>  

   return 0;

}

Output: 

Constructor Called

ஃபங்க்சன் ஓவர் லோடிங்கிற்கும் டெம்ப்லேட்ஸிற்கும் என்ன வித்தியாசம்?

இரண்டுமே பாலிமார்பிசன் என்ற ஊப்ஸ் கான்செட்டையே குறிக்கின்றது.

ஃபங்க்சன் ஒவர் லோடிங்க் ஆனது மல்டிபிள் ஃபங்க்சன்கள் ஒத்த ஆபரேசன் செய்யும் பொழுது பயன்படுகின்றது. டெம்ப்லேட் ஆனது மல்டிபிள் ஃபங்க்சன் ஒரே ஆபரேசன் செய்யும் பொழுது பயன்படுகின்றது.

கிளாஸ் டெம்ப்லேட் அல்லது ஃபங்க்சன் டெம்ப்லேட்டில் ஸ்டேட்டிக் மெம்பர் இருந்தால் என்ன ஆகும்?

ஒவ்வொரு டெம்ப்லேட்டின் இன்ஸ்டன்ஸும் தனக்கான ஸ்டேட்டிக் வேரியபிளைக் கொண்டுள்ளது.

நன்றி.

முத்துகார்த்திகேயன் ,மதுரை.

ads Udanz

1 comment: