Presentation is loading. Please wait.

Presentation is loading. Please wait.

C++ Programming: chapter 8 – Templates

Similar presentations


Presentation on theme: "C++ Programming: chapter 8 – Templates"— Presentation transcript:

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


Download ppt "C++ Programming: chapter 8 – Templates"

Similar presentations


Ads by Google