πν νλ¦Ώ
ν¨μλ ν΄λμ€λ₯Ό κ°λ³μ μΌλ‘ λ€μ μμ±νμ§ μμλ, μ¬λ¬ μλ£νμΌλ‘ μ¬μ©ν μ μλλ‘ λ§λ€μ΄λμ ν. μ¬λ¬ νμ μμ λμν μ μλ ν¨μλ₯Ό μ°μ΄λ΄λ ν. λ€μν νμ μ λν΄μ νλμ ν¨μλ§ μ μνμ¬ μ¬μ©ν μ μλ€.
μ΄λ¬ν ννμ ν¨μκ° μλ€λ κ²λ§ μ½μν΄λκ³ , ν¨μκ° νΈμΆλλ μμ μ μΈμμ νμ μ λ°λΌ μ€μ ν¨μμΈ ν νλ¦Ώ μΈμ€ν΄μ€ ν¨μλ₯Ό λ§λ λ€.(μ»΄νμΌλ¬κ° μ λ¬λ νμ μ κ²μ¬νμ¬ κ·Έμ ν΄λΉνλ ν¨μλ₯Ό μμ±νλ€.)
// ν¨μ ν
νλ¦Ώ
template <typename T>
T FunctionTemplate(T a, T b) {
...
}
// ν΄λμ€ ν
νλ¦Ώ
template <class T>
class MyClass {
public:
MyClass(T a) {
this->a = a;
}
private :
T a;
}
πν¨μ ν νλ¦Ώ(Function Template)
λ²μ©νμ λ€λ£° μ μλ ν¨μμ μ μ. μ΄λ€ νμ μ΄λ μ΄λ¬ν ννλ₯Ό κ°μ§λ€κ³ μ¬μ μ μ μν΄λλ ν.
λ μλ₯Ό λΉκ΅νλ ν¨μ `Max()`λ₯Ό μ μνλ€. μ΄λ μ μκ° μλ μλ£νμ΄ λ€μ΄μ¬ μ μμΌλ―λ‘ μ€λ²λ‘λ© ν΄μΌνλ€.
int Max(int a, int b) {
return a > b ? a : b;
}
double Max(double a, double b) {
return a > b ? a : b;
}
char Max(char a, char b) {
return a > b ? a : b;
}
λ§€κ°λ³μ νμ κ³Ό λ¦¬ν΄ νμ λ§ λ€λ₯Ό λΏ ν¨μμ λ΄λΆκ° λͺ¨λ μ€λ³΅λλ κ²μ λ³Ό μ μλ€.
μ΄μ κ°μ΄ νμ λ§ λΉΌκ³ μ½λκ° λͺ¨λ λμΌν λ, μ€λ²λ‘λ© λμ ν νλ¦Ώμ μ μν μ μλ€.
template <typename T>
T Max(T a, T b) {
return a > b ? a : b;
}
πν΄λμ€ ν νλ¦Ώ(Class Template)
κ°λ¨ν μ€νμ ꡬνν΄λ³΄μ. μ΄λ μ΄λ€ μλ£νμ΄ λ€μ΄μ¬μ§ μ μ μμΌλ―λ‘ ν νλ¦ΏμΌλ‘ ν΄λμ€λ₯Ό μ μνλ€.
template <class T>
class MyStack {
public:
MyStack(int size) {
this->ptr = new T[size];
this->size = size;
}
~MyStack() {
delete[] ptr;
}
void Push(T a) {
*ptr++ = a;
}
T Pop() {
T temp = *--ptr;
*ptr = NULL;
return temp;
}
int Size() const {
return this->size;
}
private:
T* ptr;
int size;
};
int main() {
MyStack<int> testStack(5);
testStack.Push(1);
testStack.Push(15);
testStack.Push(29);
cout << testStack.Pop() << endl;
cout << testStack.Pop() << endl;
cout << testStack.Pop() << endl;
return 0;
}
// μΆλ ₯κ°
// 29
// 15
// 1
πμλ‘ λ€λ₯Έ νμ μ 2κ° μ΄μ κ°λ ν νλ¦Ώ
λ²μ© νμ μ μν΄ νμ μ΄λ¦μ `T` λ‘ μ μνμλ€. μ΄λ `T` λ μΉνλλ λ¨μ΄μ κ°μΌλ―λ‘ λ€μκ³Ό κ°μ΄ λ κ° μ΄μ μ μν μ μλ€.
template <class Key, class Value>
class Map {
public:
Map() {}
void insert(const Key& key, const Value& value) {
}
bool find(const Key& key, Value& value) const {
...
}
bool delete(const Key& key) {
...
}
private:
...
};
'C, C++' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C++] μ€λ§νΈ ν¬μΈν° (0) | 2024.09.19 |
---|---|
[C++] STL (0) | 2024.09.05 |
[C++] μμ(Inheritance) (0) | 2024.08.29 |
[C++] κ°μ²΄ μ§ν₯ (6) | 2024.08.19 |
[C] λμ λ©λͺ¨λ¦¬ ν λΉ (0) | 2024.08.13 |