Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Template Kelas C++

Template Kelas C++

Dalam tutorial ini, kita akan belajar tentang template kelas di C++ dengan bantuan contoh.

Templat adalah fitur canggih C++ yang memungkinkan kita menulis program generik. Ada dua cara untuk mengimplementasikan template:

Mirip dengan templat fungsi, kita dapat menggunakan templat kelas untuk membuat satu kelas untuk bekerja dengan tipe data yang berbeda.

Template kelas sangat berguna karena dapat membuat kode kita lebih pendek dan lebih mudah dikelola.


Deklarasi Template Kelas

Templat kelas dimulai dengan kata kunci template diikuti oleh parameter template di dalam <> yang diikuti oleh deklarasi kelas.

template <class T>
class className {
  private:
    T var;
    ... .. ...
  public:
    T functionName(T arg);
    ... .. ...
};

Dalam deklarasi di atas, T adalah argumen template yang merupakan placeholder untuk tipe data yang digunakan, dan class adalah kata kunci.

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


Membuat Objek Template Kelas

Setelah kita mendeklarasikan dan mendefinisikan template kelas, kita dapat membuat objeknya di kelas atau fungsi lain (seperti main() function) dengan sintaks berikut

className<dataType> classObject;

Misalnya,

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

Contoh 1:Template Kelas C++

// C++ program to demonstrate the use of class templates

#include <iostream>
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;
}

Keluaran

int Number = 7
double Number = 7.7

Dalam program ini. kita telah membuat template kelas Number dengan kode

template <class T>
class Number {
   private:
    T num;

   public:
    Number(T n) : num(n) {}
    T getNum() { return num; }
};

Perhatikan bahwa variabel num , argumen konstruktor n , dan fungsi getNum() bertipe T , atau memiliki jenis pengembalian T . Itu berarti mereka bisa dari jenis apa pun.

Di main() , kita telah mengimplementasikan template kelas dengan membuat objeknya

Number<int> numberInt(7);
Number<double> numberDouble(7.7);

Perhatikan kode Number<int> dan Number<double> pada kode di atas.

Ini membuat definisi kelas masing-masing untuk int dan float , yang kemudian digunakan sebagaimana mestinya.

Adalah wajib untuk menentukan tipe ketika mendeklarasikan objek dari templat kelas. Jika tidak, kompilator akan menghasilkan kesalahan.

//Error
Number numberInt(7);
Number numberDouble(7.7);

Mendefinisikan Anggota Kelas Di Luar Templat Kelas

Misalkan kita perlu mendefinisikan fungsi di luar templat kelas. Kita dapat melakukannya dengan kode berikut:

template <class T>
class ClassName {
    ... .. ...
    // Function prototype
    returnType functionName();
};

// Function definition
template <class T>
returnType ClassName<T>::functionName() {
    // code
}

Perhatikan bahwa kode template <class T> diulang saat mendefinisikan fungsi di luar kelas. Ini diperlukan dan merupakan bagian dari sintaks.

Jika kita melihat kode di Contoh 1 , kami memiliki fungsi getNum() yang didefinisikan di dalam templat kelas Number .

Kita dapat mendefinisikan getNum() di luar Number dengan kode berikut:

template <class T>
class Number {
    ... .. ...
    // Function prototype
    T getnum();
};

// Function definition
template <class T>
T Number<T>::getNum() {
    return num;
}

Contoh 2:Kalkulator Sederhana Menggunakan Template Kelas

Program ini menggunakan template kelas untuk melakukan penjumlahan, pengurangan, perkalian dan pembagian dua variabel num1 dan num2 .

Variabel dapat berupa jenis apa pun, meskipun kami hanya menggunakan int dan float ketik dalam contoh ini.

#include <iostream>
using namespace std;

template <class T>
class Calculator {
   private:
    T num1, num2;

   public:
    Calculator(T n1, T n2) {
        num1 = n1;
        num2 = n2;
    }

    void displayResult() {
        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;
}

Keluaran

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

Pada program di atas, kita telah mendeklarasikan template kelas Calculator .

Kelas berisi dua anggota pribadi bertipe T :num1 &num2 , dan konstruktor untuk menginisialisasi anggota.

Kami juga memiliki add() , subtract() , multiply() , dan divide() fungsi yang memiliki tipe kembalian T . Kami juga memiliki void fungsi displayResult() yang mencetak hasil fungsi lainnya.

Dalam main() , kita telah membuat dua objek Calculator :satu untuk int tipe data dan satu lagi untuk float tipe data.

Calculator<int> intCalc(2, 1);
Calculator<float> floatCalc(2.4, 1.2);

Ini meminta kompiler untuk membuat dua definisi kelas untuk masing-masing tipe data selama kompilasi.


Template Kelas C++ Dengan Banyak Parameter

Di C++, kita dapat menggunakan beberapa parameter template dan bahkan menggunakan argumen default untuk parameter tersebut. Misalnya,

template <class T, class U, class V = int>
class ClassName {
  private:
    T member1;
    U member2;
    V member3;
    ... .. ...
  public:
    ... .. ...
};

Contoh 3:Template C++ Dengan Banyak Parameter

#include <iostream>
using namespace std;

// Class template with multiple and default parameters
template <class T, class U, class V = char>
class ClassTemplate {
   private:
    T var1;
    U var2;
    V var3;

   public:
    ClassTemplate(T v1, U v2, V v3) : var1(v1), var2(v2), var3(v3) {}  // constructor

    void printVar() {
        cout << "var1 = " << var1 << endl;
        cout << "var2 = " << var2 << endl;
        cout << "var3 = " << var3 << endl;
    }
};

int main() {
    // create object with int, double and char types
    ClassTemplate<int, double> obj1(7, 7.7, 'c');
    cout << "obj1 values: " << endl;
    obj1.printVar();

    // create object with int, double and bool types
    ClassTemplate<double, char, bool> obj2(8.8, 'a', false);
    cout << "\nobj2 values: " << endl;
    obj2.printVar();

    return 0;
}

Keluaran

obj1 values: 
var1 = 7
var2 = 7.7
var3 = c

obj2 values: 
var1 = 8.8
var2 = a
var3 = 0

Dalam program ini, kami telah membuat template kelas, bernama ClassTemplate , dengan tiga parameter, dengan salah satunya sebagai parameter default.

template <class T, class U, class V = char>
class ClassTemplate {
  // code  
};

Perhatikan kode class V = char . Artinya V adalah parameter default yang tipe defaultnya adalah char .

Di dalam ClassTemplate , kami mendeklarasikan 3 variabel var1 , var2 dan var3 , masing-masing sesuai dengan salah satu parameter template.

class ClassTemplate {
   private:
    T var1;
    U var2;
    V var3;
    ... .. ...
    ... .. ...
};

Di main() , kita membuat dua objek ClassTemplate dengan kode

// create object with int, double and char types
ClassTemplate<int, double> obj1(7, 7.7, 'c');

// create object with double, char and bool types
ClassTemplate<double, char, bool> obj2(8, 8.8, false);

Di sini,

Objek B U V obj1 int double char obj2 double char bool

Untuk obj1 , T = int , U = double dan V = char .

Untuk obj2 , T = double , U = char dan V = bool .


Bahasa C

  1. C# Kata Kunci statis
  2. C# Kelas Bersarang
  3. Operator C++
  4. Komentar C++
  5. Kelas Penyimpanan di C++
  6. Polimorfisme dalam C++
  7. Abstraksi Data dalam C++
  8. Enkapsulasi Data dalam C++
  9. Antarmuka dalam C++ (Kelas Abstrak)
  10. Template C++