산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 클래스 템플릿

C++ 클래스 템플릿

이 튜토리얼에서는 예제를 통해 C++의 클래스 템플릿에 대해 배울 것입니다.

템플릿은 일반 프로그램을 작성할 수 있게 해주는 C++의 강력한 기능입니다. 템플릿을 구현할 수 있는 두 가지 방법이 있습니다.

함수 템플릿과 유사하게 클래스 템플릿을 사용하여 다양한 데이터 유형으로 작업할 단일 클래스를 생성할 수 있습니다.

클래스 템플릿은 코드를 더 짧고 관리하기 쉽게 만들 수 있으므로 편리합니다.

<시간>

클래스 템플릿 선언

클래스 템플릿은 template 키워드로 시작합니다. <> 내부에 템플릿 매개변수가 뒤따릅니다. 그 뒤에 클래스 선언이 옵니다.

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

위 선언에서 T 사용된 데이터 유형의 자리 표시자인 템플릿 인수이고 class 는 키워드입니다.

클래스 본문 내에서 멤버 변수 var 및 멤버 함수 functionName() 둘 다 T 유형입니다. .

<시간>

클래스 템플릿 개체 만들기

클래스 템플릿을 선언하고 정의한 후에는 다른 클래스나 함수(예:main() 함수) 다음 구문을 사용하여

className<dataType> classObject;

예를 들어,

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

예제 1: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;
}

출력

int Number = 7
double Number = 7.7

이 프로그램에서. Number 클래스 템플릿을 만들었습니다. 코드로

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

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

변수 num , 생성자 인수 n 및 함수 getNum() T 유형입니다. 또는 반환 유형이 T입니다. . 즉, 모든 유형이 될 수 있습니다.

main()에서 , 객체를 생성하여 클래스 템플릿을 구현했습니다.

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

코드 Number<int>를 확인하세요. 및 Number<double> 위의 코드에서.

이것은 int 각각에 대한 클래스 정의를 생성합니다. 및 float , 그에 따라 사용됩니다.

클래스 템플릿의 객체를 선언할 때 유형을 지정하는 것은 필수입니다. 그렇지 않으면 컴파일러에서 오류가 발생합니다.

//Error
Number numberInt(7);
Number numberDouble(7.7);
<시간>

클래스 템플릿 외부에서 클래스 멤버 정의

클래스 템플릿 외부에 함수를 정의해야 한다고 가정합니다. 다음 코드로 이 작업을 수행할 수 있습니다.

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

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

코드 template <class T> 클래스 외부에서 함수를 정의하는 동안 반복됩니다. 이것은 필수이며 구문의 일부입니다.

예 1의 코드를 보면 , getNum() 함수가 있습니다. 클래스 템플릿 Number 안에 정의되어 있습니다. .

getNum()을 정의할 수 있습니다. Number 외부 다음 코드로:

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

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

예제 2:클래스 템플릿을 사용하는 간단한 계산기

이 프로그램은 클래스 템플릿을 사용하여 두 변수 num1의 덧셈, 뺄셈, 곱셈 및 나눗셈을 수행합니다. 및 num2 .

변수는 모든 유형이 될 수 있지만 int만 사용했습니다. 및 float 이 예의 유형입니다.

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

출력

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

위의 프로그램에서 우리는 클래스 템플릿 Calculator를 선언했습니다. .

클래스에는 T 유형의 두 개인 멤버가 포함되어 있습니다. :num1 &num2 , 그리고 멤버를 초기화하는 생성자.

add()도 있습니다. , subtract() , multiply()divide() 반환 유형이 T인 함수 . void도 있습니다. 함수 displayResult() 다른 함수의 결과를 출력합니다.

main()에서 , Calculator의 두 개체를 만들었습니다. :int용 데이터 유형 및 float에 대한 다른 유형 데이터 유형.

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

이렇게 하면 컴파일러에서 컴파일하는 동안 각 데이터 유형에 대해 두 개의 클래스 정의를 생성하라는 메시지가 표시됩니다.

<시간>

여러 매개변수가 있는 C++ 클래스 템플릿

C++에서는 여러 템플릿 매개변수를 사용할 수 있으며 해당 매개변수에 기본 인수를 사용할 수도 있습니다. 예를 들어,

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

예시 3:여러 매개변수가 있는 C++ 템플릿

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

출력

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

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

이 프로그램에서는 ClassTemplate라는 클래스 템플릿을 만들었습니다. , 세 개의 매개변수가 있으며 그 중 하나는 기본 매개변수입니다.

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

class V = char 코드를 확인하세요. . 즉, V 기본 유형이 char인 기본 매개변수입니다. .

ClassTemplate 내부 , 우리는 3개의 변수 var1를 선언합니다. , var2var3 , 각각은 템플릿 매개변수 중 하나에 해당합니다.

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

main()에서 , ClassTemplate의 두 개체를 만듭니다. 코드로

// 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);

여기,

객체 V
obj1 int double char
obj2 double char bool

obj1의 경우 , T = int , U = doubleV = char .

obj2의 경우 , T = double , U = charV = bool .


C 언어

  1. C# 정적 키워드
  2. C# 중첩 클래스
  3. C++ 연산자
  4. C++ 주석
  5. C++의 스토리지 클래스
  6. C++의 다형성
  7. C++의 데이터 추상화
  8. C++의 데이터 캡슐화
  9. C++의 인터페이스(추상 클래스)
  10. C++ 템플릿