Template C ++

Pada artikel ini, Anda akan mempelajari tentang template di C ++. Anda akan belajar menggunakan kekuatan template untuk pemrograman generik.

Template adalah fitur canggih dari C ++ yang memungkinkan Anda menulis program generik. Sederhananya, Anda dapat membuat satu fungsi atau kelas untuk bekerja dengan tipe data yang berbeda menggunakan templat.

Template sering digunakan dalam basis kode yang lebih besar untuk tujuan penggunaan kembali kode dan fleksibilitas program.

Konsep templat dapat digunakan dengan dua cara berbeda:

  • Template Fungsi
  • Template Kelas

Template Fungsi

Template fungsi berfungsi serupa dengan fungsi normal, dengan satu perbedaan utama.

Templat fungsi tunggal bisa bekerja dengan tipe data yang berbeda sekaligus, tetapi satu fungsi normal hanya bisa bekerja dengan satu kumpulan tipe data.

Biasanya, jika Anda perlu melakukan operasi yang identik pada dua atau lebih jenis data, Anda menggunakan overloading fungsi untuk membuat dua fungsi dengan deklarasi fungsi yang diperlukan.

Namun, pendekatan yang lebih baik adalah menggunakan templat fungsi karena Anda dapat melakukan tugas yang sama dengan menulis lebih sedikit kode dan dapat dipelihara.

Bagaimana cara mendeklarasikan template fungsi?

Templat fungsi dimulai dengan templat kata kunci diikuti dengan parameter templat di dalamnya yang diikuti dengan deklarasi fungsi.

 template < class T> T someFunction (T arg) (…)

Pada kode di atas, T adalah argumen template yang menerima tipe data berbeda (int, float), dan class adalah kata kunci.

Anda juga dapat menggunakan kata kunci typenamesebagai pengganti kelas pada contoh di atas.

Ketika, argumen tipe data diteruskan ke someFunction( ), compiler menghasilkan versi baru dari someFunction()tipe data yang diberikan.

Contoh 1: Template Fungsi untuk mencari angka terbesar

Program untuk menampilkan terbesar di antara dua angka menggunakan templat fungsi.

 // If two characters are passed to function template, character with larger ASCII value is displayed. #include using namespace std; // template function template T Large(T n1, T n2) ( return (n1> n2) ? n1 : n2; ) int main() ( int i1, i2; float f1, f2; char c1, c2; cout <> i1>> i2; cout << Large(i1, i2) <<" is larger." << endl; cout <> f1>> f2; cout << Large(f1, f2) <<" is larger." << endl; cout <> c1>> c2; cout << Large(c1, c2) << " has larger ASCII value."; return 0; )

Keluaran

Masukkan dua bilangan bulat: 5 10 10 lebih besar. Masukkan dua angka floating-point: 12.4 10.2 12.4 lebih besar. Masukkan dua karakter: z Z z memiliki nilai ASCII yang lebih besar.

Dalam program di atas, template fungsi Large()didefinisikan yang menerima dua argumen n1 dan n2 tipe data T. Tmenandakan bahwa argumen bisa dari tipe data apa pun.

Large() fungsi mengembalikan yang terbesar di antara dua argumen menggunakan operasi bersyarat sederhana.

Di dalam main()fungsi, variabel dari tiga jenis data yang berbeda: int, floatdan chardinyatakan. Variabel kemudian diteruskan ke Large()template fungsi sebagai fungsi normal.

Selama run-time, ketika integer diteruskan ke fungsi template, compiler tahu itu harus menghasilkan Large()fungsi untuk menerima argumen int dan melakukannya.

Demikian pula, ketika data floating-point dan data karakter dilewatkan, ia mengetahui tipe data argumen dan menghasilkan Large()fungsi yang sesuai.

Dengan cara ini, hanya menggunakan satu template fungsi menggantikan tiga fungsi normal yang identik dan membuat kode Anda dapat dipelihara.

Contoh 2: Tukar Data Menggunakan Template Fungsi

Program untuk menukar data menggunakan templat fungsi.

 #include using namespace std; template void Swap(T &n1, T &n2) ( T temp; temp = n1; n1 = n2; n2 = temp; ) int main() ( int i1 = 1, i2 = 2; float f1 = 1.1, f2 = 2.2; char c1 = 'a', c2 = 'b'; cout << "Before passing data to function template."; cout << "i1 = " << i1 << "i2 = " << i2; cout << "f1 = " << f1 << "f2 = " << f2; cout << "c1 = " << c1 << "c2 = " << c2; Swap(i1, i2); Swap(f1, f2); Swap(c1, c2); cout << "After passing data to function template."; cout << "i1 = " << i1 << "i2 = " << i2; cout << "f1 = " << f1 << "f2 = " << f2; cout << "c1 = " << c1 << "c2 = " << c2; return 0; ) 

Keluaran

Sebelum meneruskan data ke template fungsi. i1 = 1 i2 = 2 f1 = 1.1 f2 = 2.2 c1 = a c2 = b Setelah mengirimkan data ke template fungsi. i1 = 2 i2 = 1 f1 = 2.2 f2 = 1.1 c1 = b c2 = a

Dalam program ini, alih-alih memanggil fungsi dengan meneruskan nilai, panggilan dengan referensi dikeluarkan.

The Swap()fungsi template membutuhkan dua argumen dan swap mereka dengan referensi.

Template Kelas

Seperti template fungsi, Anda juga dapat membuat template kelas untuk operasi kelas umum.

Terkadang, Anda memerlukan implementasi kelas yang sama untuk semua kelas, hanya tipe data yang digunakan yang berbeda.

Biasanya, Anda perlu membuat kelas yang berbeda untuk setiap tipe data ATAU membuat variabel dan fungsi anggota yang berbeda dalam satu kelas.

Ini tidak perlu membengkak basis kode Anda dan akan sulit dipertahankan, karena perubahannya adalah satu kelas / fungsi harus dilakukan pada semua kelas / fungsi.

Namun, template kelas memudahkan penggunaan kembali kode yang sama untuk semua tipe data.

Bagaimana cara mendeklarasikan template kelas?

 template < class T> class className (… public: T var; T someOperation (T arg);…);

Dalam deklarasi di atas, Tadalah argumen template yang merupakan placeholder untuk tipe data yang digunakan.

Di dalam badan kelas, variabel anggota var dan fungsi anggota someOperation()keduanya bertipe T.

Bagaimana cara membuat objek template kelas?

Untuk membuat objek template kelas, Anda perlu mendefinisikan tipe data di dalam a saat pembuatan.

 className classObject; 

Sebagai contoh:

className classObject; className classObject; className classObject;

Contoh 3: Kalkulator sederhana menggunakan templat Kelas

Program untuk menambah, mengurangi, mengalikan dan membagi dua angka menggunakan templat kelas

 #include using namespace std; template class Calculator ( private: T num1, num2; public: Calculator(T n1, T n2) ( num1 = n1; num2 = n2; ) void displayResult() ( cout << "Numbers are: " << num1 << " and " << num2 << "." << endl; cout << "Addition is: " << add() << endl; cout << "Subtraction is: " << subtract() << endl; cout << "Product is: " << multiply() << endl; cout << "Division is: " << 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 intCalc(2, 1); Calculator floatCalc(2.4, 1.2); cout << "Int results:" << endl; intCalc.displayResult(); cout << endl << "Float results:" << endl; floatCalc.displayResult(); return 0; ) 

Keluaran

Hasil Int: Angka: 2 dan 1. Penjumlahan: 3 Pengurangan: 1 Hasil Kali: 2 Pembagian: 2 Hasil Float: Angka: 2.4 dan 1.2. Penjumlahan adalah: 3.6 Pengurangan: 1.2 Hasil kali adalah: 2.88 Pembagian adalah: 2

Dalam program di atas, template kelas Calculatordideklarasikan.

Kelas berisi dua anggota pribadi dengan tipe T: num1 & num2, dan konstruktor untuk mengaktifkan anggota.

Ini juga berisi fungsi anggota publik untuk menghitung penambahan, pengurangan, perkalian dan pembagian angka yang mengembalikan nilai tipe data yang ditentukan oleh pengguna. Demikian juga fungsi displayResult()untuk menampilkan hasil akhir ke layar.

Dalam main()fungsinya, dua Calculatorobjek berbeda intCalcdan floatCalcdibuat untuk tipe data: intdan floatmasing - masing. Nilai diinisialisasi menggunakan konstruktor.

Perhatikan kami menggunakan dan saat membuat objek. Ini memberi tahu compiler tipe data yang digunakan untuk pembuatan kelas.

Ini menciptakan definisi kelas masing-masing untuk intdan float, yang kemudian digunakan sesuai.

Kemudian, displayResult()dari kedua objek tersebut dipanggil yang melakukan operasi Kalkulator dan menampilkan outputnya.

Artikel yang menarik...