做网站需要,企业收录网站有什么用,三只松鼠网站推广策略,江门排名优化怎么做摘要#xff1a;泛型编程#xff0c;函数模板#xff0c;类模板 使用函数重载虽然可以实现#xff0c;但是有一下几个不好的地方#xff1a; 重载的函数仅仅是类型不同#xff0c;代码复用率比较低#xff0c;只要有新类型出现时#xff0c;就需要用户自己增加对应的函…摘要泛型编程函数模板类模板 使用函数重载虽然可以实现但是有一下几个不好的地方 重载的函数仅仅是类型不同代码复用率比较低只要有新类型出现时就需要用户自己增加对应的函数代码的可维护性比较低一个出错可能所有的重载均出错。 告诉编译器一个模子让编译器根据不同的类型利用该模子来生成代码。——模板 泛型编程编写与类型无关的通用代码是代码复用的一种手段。模板是泛型编程的基础。 1. 函数模板
#includeiostreamtemplateclass T
void Swap(T x, T y)
{T tmp x;x y;y tmp;
}int main()
{int v1 1, v2 2;Swap(v1, v2);std::cout v1 v2 std::endl;double d1 1.1, d2 2.2;Swap(d1, d2);std::cout d1 d2 std::endl;return 0;
} 注意模板参数类型不匹配的问题如下
问题描述上述代码中如果 Swap 函数的类型匹配如 Swap( 1 , 1.3 ) ——参数类型分别为 int , double 类型不匹配编译器会报错解决方式①强制类型转换 e.g.Swap( 1 , (int)1.3 )②显式调用 e.g.Swapint( 1 , 1.3 )
函数模板调用原则调用最匹配的同时如果有现成的优先用现成的就是已经被实例化显式的函数
显式实例化可以强制调用function_nameType(parameters) 2. 类模板
当我们创建一个类这个类中需要存储不同的数据类型例如 同函数模板类模板也是起到一个模板的作用编译通过模板来进行实例化实例化出不同的类根据显式实例化调用来匹配。 成员函数声明和定义分离的问题
templateclass T
class MyStack
{
public:void Test();//函数声明
private:T* _a;size_t _top;size_t _capacity;
};templateclass T
void MyStackT::Test()
{//函数定义
} 如上述代码若声明与定义分离定义时需指明类域类模板中 classnameT 才是类型 (Type)普通类中 classname 即为类型(Type)。类型即为域名同时templateclass T 也需要单独声明。
注类模板 声明和定义 分离在 不同的文件中会出现链接失败不建议声明和定义分离。 END