Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C++ Class Templates Beheersen: Een Praktische Gids

C++ Class Templates Beheersen: Een Praktische Gids

Leer hoe je C++ class templates kunt benutten om flexibele, type-agnostische code te schrijven met duidelijke, real-world voorbeelden.

Templates zijn een hoeksteen van generiek programmeren in C++. Ze laten je herbruikbare componenten creëren die met elk datatype werken, wat de codehelderheid verbetert en duplicatie vermindert. C++ biedt twee soorten templates: functie templates en class templates.

  • Functie Templates
  • Class Templates

Class templates stellen je in staat om een enkele klasse te definiëren die zich aanpast aan meerdere datatypes. Dit verkort niet alleen je code, maar maakt het ook makkelijker te onderhouden.


Een Class Template Declareren

Een class template begint met het template sleutelwoord, gevolgd door een lijst van template parameters tussen haakjes. Daarna volgt de echte klassedefinitie.

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

Hier is T een placeholder voor het datatype dat geleverd wordt wanneer de template geïnstantieerd wordt. Het sleutelwoord class kan vervangen worden door typename zonder de semantiek te veranderen.


Een Class Template Instantiëren

Eenmaal een template gedefinieerd, kun je objecten creëren door het gewenste type te specificeren:

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

Elke instantiatie genereert een concrete klasse afgestemd op het gespecificeerde type tijdens compilatie.


Voorbeeld 1: Generieke Number Wrapper

#include <iostream> using namespace std; // Class template die een enkele waarde van elk type opslaat 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; }

Output

int Number = 7 double Number = 7.7

Let op dat de template parameter T gebruikt wordt voor het lidvariabele, constructorargument en return type, wat de klasse in staat stelt om met elk type te werken.


Leden Definiëren Buiten de Klasse

Wanneer een lidfunctie groot is of gedeeld over specialisaties, kun je het buiten de klassebody definiëren:

template <class T> class Sample { public: T identity(); }; // Buiten-definitie template <class T> T Sample<T>::identity() { return static_cast<T>(1); }

Let op de herhaling van de template<class T> declaratie voor de buiten-definitie.


Voorbeeld 2: Calculator met Class 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 resultaten:\n"; intCalc.display(); cout << "\nFloat resultaten:\n"; floatCalc.display(); return 0; }

Output

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

Templates met Meerdere Parameters

Class templates kunnen meer dan één parameter accepteren, en je kunt zelfs standaardtypen opgeven:

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

Voorbeeld 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 waarden:\n"; obj1.print(); ClassTemplate<double, char, bool> obj2(8.8, 'a', false); cout << "\nobj2 waarden:\n"; obj2.print(); return 0; }

Output

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

In dit voorbeeld is de derde template parameter standaard char, maar kan overschreven worden zoals getoond met bool in obj2.

C Taal

  1. C# Static Keyword: Static Variabelen, Methodes en Classes Beheersen
  2. C# Geneste Classes: Definitie, Gebruik en Inheritance
  3. C++ operators: complete gids met praktische voorbeelden
  4. C++ comments: best practices voor leesbare, onderhoudbare code
  5. Storage Classes in C++ Begrijpen: Scope, Levensduur en Gebruik
  6. Polymorfisme in C++ Begrijpen: Een Praktische Gids
  7. Data Abstractie in C++ Beheersen: Ontwerp Vereenvoudigen met Interface-Implementatie Scheiding
  8. Data Encapsulatie in C++: Uw Code Beschermen
  9. C++ Interfaces: Abstracte Klassen & Pure Virtual Functions Beheersen
  10. C++ Templates Beheersen: Gids voor Generisch Programmeren
  11. C# Erfelijkheid Beheersen: Herbruikbare, Onderhoudbare Code Bouwen