大家好,我是老A。今天我们要学习的是工程C++,这是一个不可描述的东西。我主要讲的是template。
template的用处是装逼,所以很重要。
C++配备了函数模板和类模板。函数模板就是我们平时的函数改一下就好了,我来举个例子。
#include<bits/stdc++.h> using namespace std; template<class T>inline T read(T&x){ x=0; register char c='0'; while(c<48)c=getchar(); while(c>47)x=(x<<1)+(x<<3)+(c^48),c=getchar(); }signed main(){ bool n; read(n); return 0; }
有趣,只要改一下C++的自带类型就可以了,如果是min函数,C++的自带不会让你用char类型的,如果我们用一个T来代替,嘿嘿嘿。前面加上class或者typename就可以了。和函数比较呢?比较简单的函数可以用这个代替。电脑自动装换成对应的类型。
下面是另一个例子。
#include<bits/stdc++.h> using namespace std; template<class T>T maxx(T x,T y){ return (x>y)?x:y; }signed main(){ int a=1,b=2; double c=1.1,d=1.2; char e='0',f='1'; cout<<maxx(a,b)<<"\n"<<maxx(c,d)<<"\n"<<maxx(e,f); }
太秀了,这个函数模板返回了所有类型,函数模板的作用就这么多了,同时多次调用。
接下来是类模板,他的作用是装逼,说的我和装逼男一样。客观上这个真的是装逼神器,各种private,public和static让你看不懂。
template <class T> class Stack { public: Stack(); ~Stack(); void push(T t); T pop(); bool isEmpty(); private: T *m_pT; int m_maxSize; int m_size; }; #include "stack.cpp" template <class T> Stack<T>::Stack(){ m_maxSize = 100; m_size = 0; m_pT = new T[m_maxSize]; } template <class T> Stack<T>::~Stack() { delete [] m_pT ; } template <class T> void Stack<T>::push(T t) { m_size++; m_pT[m_size - 1] = t; } template <class T> T Stack<T>::pop() { T t = m_pT[m_size - 1]; m_size--; return t; } template <class T> bool Stack<T>::isEmpty() { return m_size == 0; } #include <stdio.h> #include "stack.h" int main() { Stack<int> intStack; intStack.push(1); intStack.push(2); intStack.push(3); while (!intStack.isEmpty()) { printf("num:%d\n", intStack.pop()); } return 0; }
我们的private指的是模板类的内置部分,就是类的变量啊,public就是外置的函数,懂了吧。
这个东西的作用就是代替我们常用的结构体内置函数,其实差不多啊。当然这个可以模拟所有类型的混合数据结构,吊吧。
C++的template就讲到这里,完结撒花。