为了提高代码的复用率,C++中引入了模板--告诉编译器一个模版,让编译器根据不同的类型利用该模板来生成代码。
函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本,以此来提高代码的复用率。
模板格式:template
由于普通函数制定了参数类型,所以会自动进行类型转换。
2.类模板类模板的成员函数本身也是模板函数!!!
类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中,类模板名字不是真正的类,而实例化的结果才是真正的类。templateclass Stack { public: Stack(T capicty=10) :_top(0) , _a(nullptr) , _capicty(10) { if (capicty > 0) { _capicty = capicty; _a = new T[_capicty]; } } ~Stack() { delete[]_a; _top = _capicty = 0; } void stackpush(T n);//判断在同一文件内声明和定义是否可以分离 const T& stacktop() { if (_top <= 0) { cout << "error" << endl; return 0; } return _a[_top - 1]; } void stackpop() { if (_top <= 0) { cout << "error" << endl; } else _top--; } bool empity() { return _top == 0; } private: T* _a; int _top; int _capicty; }; //类模板中函数放在类外进行定义时,需要加模板参数列表 template void Stack ::stackpush(T n) { if (_top == _capicty) { T* tmp = new T[_capicty * 2]; memcpy(tmp, _a, sizeof(T) * _top); _a = tmp; } _a[_top] = n; _top++; } int main() { Stack st(5); return 0; }



