Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++ Klassentemplates meistern: Ein praktischer Leitfaden

C++ Klassentemplates meistern: Ein praktischer Leitfaden

Erfahren Sie, wie Sie C++ Klassentemplates nutzen, um flexiblen, typunabhängigen Code mit klaren, realen Beispielen zu schreiben.

Templates sind ein Eckpfeiler der generischen Programmierung in C++. Sie ermöglichen es Ihnen, wiederverwendbare Komponenten zu erstellen, die mit jedem Datentyp funktionieren, was die Codeklarheit verbessert und Duplikation reduziert. C++ bietet zwei Arten von Templates: Funktions-Templates und Klassen-Templates.

Klassen-Templates ermöglichen es Ihnen, eine einzelne Klasse zu definieren, die sich an mehrere Datentypen anpasst. Dies verkürzt nicht nur Ihren Code, sondern macht ihn auch einfacher zu warten.


Klassen-Template deklarieren

Ein Klassen-Template beginnt mit dem template-Schlüsselwort, gefolgt von einer Liste von Template-Parametern in spitzen Klammern. Darauf folgt die eigentliche Klassendefinition.

template <class T> class MyClass { private: T var; public: T getVar() const; };

Hier ist T ein Platzhalter für den Datentyp, der bei der Instanziierung des Templates bereitgestellt wird. Das Schlüsselwort class kann durch typename ersetzt werden, ohne die Semantik zu ändern.


Klassen-Template instanziieren

Sobald ein Template definiert ist, können Sie Objekte erstellen, indem Sie den gewünschten Typ angeben:

MyClass<int> intObj; MyClass<float> floatObj; MyClass<std::string> stringObj;

Jede Instanziierung erzeugt zur Kompilierzeit eine konkrete Klasse, die auf den angegebenen Typ zugeschnitten ist.


Beispiel 1: Generischer Zahlen-Wrapper

#include <iostream> using namespace std; // Klassen-Template, das einen einzelnen Wert beliebigen Typs speichert template <class T> class Number { private: T value; public: Number(T v) : value(v) {} T getValue() const { return value; } }; int main() { Number<int> intNum(7); Number<double> doubleNum(7.7); cout << "int Number = " << intNum.getValue() << endl; cout << "double Number = " << doubleNum.getValue() << endl; return 0; }

Ausgabe

int Number = 7 double Number = 7.7

Beachten Sie, dass der Template-Parameter T für die Mitgliedsvariable, das Konstruktorargument und den Rückgabetyp verwendet wird, was der Klasse erlaubt, mit jedem Typ zu arbeiten.


Mitglieder außerhalb der Klasse definieren

Wenn eine Mitgliedsfunktion groß oder über Spezialisierungen hinweg geteilt wird, können Sie sie außerhalb des Klassenkörpers definieren:

template <class T> class Sample { public: T identity(); }; // Außerhalb der Klasse definieren template <class T> T Sample<T>::identity() { return static_cast<T>(1); }

Beachten Sie die Wiederholung der template<class T> Deklaration vor der Außerhalb-der-Klasse-Definition.


Beispiel 2: Rechner mit Klassen-Templates

#include <iostream> using namespace std; template <class T> class Calculator { private: T a, b; public: Calculator(T x, T y) : a(x), b(y) {} T add() const { return a + b; } T subtract() const { return a - b; } T multiply() const { return a * b; } T divide() const { return a / b; } void display() const { cout << "a: " << a << ", b: " << b << endl; cout << "a + b = " << add() << endl; cout << "a - b = " << subtract() << endl; cout << "a * b = " << multiply() << endl; cout << "a / b = " << divide() << endl; } }; int main() { Calculator<int> intCalc(2, 1); Calculator<float> floatCalc(2.4f, 1.2f); cout << "Int Ergebnisse:\n"; intCalc.display(); cout << "\nFloat Ergebnisse:\n"; floatCalc.display(); return 0; }

Ausgabe

Int Ergebnisse: a: 2, b: 1 a + b = 3 a - b = 1 a * b = 2 a / b = 2 Float Ergebnisse: a: 2.4, b: 1.2 a + b = 3.6 a - b = 1.2 a * b = 2.88 a / b = 2

Templates mit mehreren Parametern

Klassen-Templates können mehr als einen Parameter akzeptieren, und Sie können sogar Standardtypen bereitstellen:

template <class T, class U, class V = int> class MultiParam { T first; U second; V third; };

Beispiel 3: Multi-Parameter Template

#include <iostream> using namespace std; 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) {} void print() const { cout << "var1 = " << var1 << endl; cout << "var2 = " << var2 << endl; cout << "var3 = " << var3 << endl; } }; int main() { ClassTemplate<int, double> obj1(7, 7.7, 'c'); cout << "obj1 Werte:\n"; obj1.print(); ClassTemplate<double, char, bool> obj2(8.8, 'a', false); cout << "\nobj2 Werte:\n"; obj2.print(); return 0; }

Ausgabe

obj1 Werte: var1 = 7 var2 = 7.7 var3 = c obj2 Werte: var1 = 8.8 var2 = a var3 = 0

In diesem Beispiel hat der dritte Template-Parameter standardmäßig char, kann aber wie bei obj2 mit bool überschrieben werden.

C Sprache

  1. C# Static Keyword: Statische Variablen, Methoden und Klassen meistern
  2. C# Geschachtelte Klassen verstehen: Definition, Verwendung und Vererbung
  3. C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
  4. C++-Kommentare: Best Practices für lesbaren, wartbaren Code
  5. C++ Speicherklassen: Scope, Lifetime & Verwendung
  6. Polymorphie in C++: Praktischer Leitfaden
  7. Datenabstraktion in C++: Interface-Implementierung-Trennung
  8. Datenkapselung in C++: Code schützen & strukturieren
  9. C++ Interfaces: Abstrakte Klassen & Pure Virtual Functions
  10. C++ Templates: Generische Programmierung meistern