//
// main.cpp
// ExampleCpp
//
// Created by 김일호 on 2015. 7. 10..
// Copyright (c) 2015년 김일호. All rights reserved.
// 클래스 템플릿 사용 전 각 자료형에 맞는 클래스를 생성
#include <iostream>
#include <string>
using namespace std;
class IntArray
{
int *buf;
int size;
int capacity;
public:
explicit IntArray(int cap = 100):buf(0), size(0), capacity(cap)
{
buf = new int[capacity];
}
~IntArray() { delete[] buf;}
void Add(int data)
{
buf[size++] = data;
}
int operator[](int idx) const
{
return buf[idx];
}
int GetSize() const
{
return size;
}
};
class DoubleArray
{
double *buf;
int size;
int capacity;
public:
explicit DoubleArray(int cap=100):buf(0), size(0), capacity(cap)
{
buf = new double[capacity];
}
~DoubleArray() {delete[] buf;}
void Add(double data)
{
buf[size++] = data;
}
double operator[] (int idx) const
{
return buf[idx];
}
int GetSize() const {return size;}
};
class StringArray
{
string *buf;
int size;
int capacity;
public:
explicit StringArray(int cap = 100):buf(0), size(0), capacity(cap)
{
buf = new string[capacity];
}
void Add(string data)
{
buf[size++] = data;
}
string operator[] (int idx) const
{
return buf[idx];
}
int GetSize() const {return size;}
};
int main()
{
IntArray iarr;
iarr.Add(10);
iarr.Add(20);
iarr.Add(30);
for (int i = 0; i<iarr.GetSize(); ++i)
{
cout << iarr[i] << endl;
}
DoubleArray darr;
darr.Add(10.12);
darr.Add(20.12);
darr.Add(30.12);
for (int i = 0; i<darr.GetSize(); ++i)
{
cout << darr[i] << endl;
}
StringArray sarr;
sarr.Add("abc");
sarr.Add("ABC");
sarr.Add("sdfads");
for (int i = 0; i<sarr.GetSize(); ++i)
{
cout << sarr[i] << endl;
}
return 0;
}
//클래스 템플릿 버전
//
// main.cpp
// ExampleCpp
//
// Created by 김일호 on 2015. 7. 10..
// Copyright (c) 2015년 김일호. All rights reserved.
//
#include <iostream>
#include <string>
using namespace std;
template<typename T>
class Array
{
T *buf;
int size;
int capacity;
public:
explicit Array(int cap = 100):buf(0), size(0), capacity(cap)
{
buf = new T[capacity];
}
~Array() { delete[] buf;}
void Add(T data)
{
buf[size++] = data;
}
T operator[](int idx) const
{
return buf[idx];
}
int GetSize() const
{
return size;
}
};
int main()
{
Array<int> iarr;
iarr.Add(10);
iarr.Add(20);
iarr.Add(30);
for (int i = 0; i<iarr.GetSize(); ++i)
{
cout << iarr[i] << endl;
}
Array<double> darr;
darr.Add(10.12);
darr.Add(20.12);
darr.Add(30.12);
for (int i = 0; i<darr.GetSize(); ++i)
{
cout << darr[i] << endl;
}
Array<string> sarr;
sarr.Add("abc");
sarr.Add("ABC");
sarr.Add("sdfads");
for (int i = 0; i<sarr.GetSize(); ++i)
{
cout << sarr[i] << endl;
}
return 0;
}
클래스를 템플릿화 시키면서 클라이언트에서는 자료형에 상관없이 클래스에 사용될 타입을 정의할 수 있다.