Download presentation
Presentation is loading. Please wait.
1
C++ Programming: chapter 8 – Templates
2018, Spring Pusan National University Ki-Joune Li
2
Function Template 바보 같은 중복 Template으로 중복 예방 T 가 int 로 간주
void swapValues(int& v1, int& v2) { int temp; temp=v1; v1=v2; v2=temp; } void swapValues(string& v1, string& v2) { float temp; temp=v1; v1=v2; v2=temp; } 바보 같은 중복 Template으로 중복 예방 template<class T> void swapValues(<T& v1, T& v2) { T temp; temp=v1; v1=v2; v2=temp; } int main(){ int a=1,b=2; swapValues<int>(a,b); // or swapValues(a,b); string c=“123”, d=“def”; swapValues<string>(c,d); // or swapValues(c,d); } T 가 int 로 간주 T 가 string 으로 간주
3
Function Template Template으로 중복 예방 모호할 경우에는 명시적으로 지정
int getMax(int, n, int* a) { int maxV=*a; for(int k=0;k<n;a++,k++) if(*a>maxV) maxV=*a; return MaxV } int getMax(int, n, float* a) { float maxV=*a; for(int k=0;k<n;a++,k++) if(*a>maxV) maxV=*a; return MaxV } Template으로 중복 예방 template<class T> T getMax(int, n, T* a) { T maxV=*a; for(int k=0;k<n;a++,k++) if(*a>maxV) maxV=*a; return MaxV } int x=getMax<int>(10, ages); float y=getMax<float>(50, scores); 모호할 경우에는 명시적으로 지정
4
Function Template – Function Overloading
#include <iostream> using namespace std; template <class X> void f(X a) { cout << "Inside f(X a)”<<a <<“\n"; } template <class X, class Y> void f(X a, Y b) { cout << "Inside f(X a, Y b)” <<a <<“:”<< b<<“\n"; } int main() { f(10); // calls f(X) f(10, 20); // calls f(X, Y) return 0; }
5
Class Template Template으로 중복 예방 T를 int 로 간주 T를 float 으로 간주 PNU
class IntVector { int* values; int num; public: IntVector(int); ~IntVector() { delete[] values;} int operator[](int i) { return values[i]; } }; IntVector::IntVector(int n): num(n) { values=new int[n];} class FloatVector { float* values; int num; public: FloatVector(int); ~FloatVector() { delete[] values;} float operator[](int i) { return values[i]; } }; FloatVector::FloatVector(int n): num(n) { values=new int[n]; } Template으로 중복 예방 T를 int 로 간주 int main() { Vector <int> iV(4); int i; for(i=0;i<4;i++) iV[i] = i*i; for(i=0;i<4;i++) cout<<iV[i] << " "; cout << endl; Vector <float> fV(4); for(i=0;i<4;i++) fV[i] = sqrt(i); for(i=0;i<4;i++) cout<<fV[i] << " "; return 0; } template<class T> class Array { int num; public: Vector(T); ~Vector() { delete[] values;} T& operator[](int i) { return values[i]; } }; Vector<T>::Vector(int n): num(n) { values=new int[n]; } T를 float 으로 간주 2
6
Class Template PNU #include <iostream> using namespace std;
template <class T> class MyClass { T x; public: MyClass(T a) { cout << "Inside generic MyClass\n"; x = a; } T getx() { return x; } }; // Explicit specialization for int. template <> class MyClass<int> { int x; MyClass(int a) { cout << "Inside MyClass<int> specialization\n"; x = a * a; int getx() { return x; } int main() { MyClass<double> d(10.1); cout << "double: " << d.getx() << endl; MyClass<int> i(5); cout << "int: " << i.getx() <<endl; return 0; }
7
Class Template PNU #include <iostream> using namespace std;
template <class T, int N> class array { T memblock[N]; public: void setMember (int x, T value) { memblock[x]=value;} T getMember (int x) { return memblock[x]; } }; int main () { array <int,5> myInts; array <float,5> myFloats; myInts.setMember (0,100); myFloats.setMember(3,3.1); cout << myInts.getMember(0) << endl; cout << myFloats.getMember(3) <<endl; return 0; } 4
8
Class Template PNU #include <iostream> using namespace std;
template <class Type1, class Type2> class MyClass { Type1 i; Type2 j; public: MyClass(Type1 a, Type2 b) { i = a; j = b; } void show() { cout << i << ' ' << j << '\n';} }; int main() MyClass<int, double> ob1(10, 0.23); MyClass<char, char*> ob2('X', "AAAAAAA"); ob1.show(); ob2.show(); return 0; }
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.