C++程序设计方法4:类模板

类模板

在定义类时也可以将一些类型抽象出来,用模板参数来替换,从而使类更具有通用性。这种类被称为模板类,例如:

template <typename T> class A

{

  T data;

  public:
    //类模板成员函数的定义方式一:在类模板中定义

    void print() {cout << data << endl;}

}

//类模板成员函数的定义方式二:在类模板外定义

template<typename T> void A::print(){cout <<data << endl;}

类模板(2)

类模板实例化类后,类实例化成为对象

类模板

类模板的“模板参数”

1.类型参数:使用typename或class标记

2.非类型参数:整数,枚举,指针(指向对象或者函数),引用(引用对象或者引用函数)。其中,整数类型是比较常用的,如:

template<typename T,unsigned size>

class array

{

  T elems[size];

  ...

}

array<char,10> array0;//用类模板实例定义对象

模板参数是另一个类模板

相应的声明形式如下:

template<typename T,template<typename TT0,typename TT1> class A>

struct Foo

{  

  A<T,T> bar;

};

时间: 2024-10-09 19:57:14

C++程序设计方法4:类模板的相关文章

C++程序设计方法4:函数模板

函数模板 有些算法与类型无关,所以可以将函数的参数类型也定义为一种特殊的"参数",这样就得到"函数模板" 定义函数模板的方法:template<typename T> 返回类型 函数名称(函数参数): 如:template<typename T> T sum(T a, T b) {return a + b;} 函数模板在调用的时候,因为编译器能够自动推导出实际参数的类型,所以,形式上调用一个函数模板与 普通函数没有区别,如: int main

C++程序设计_第7章_类模板与向量

例7.1 使用类模板的实例. 例7.2 求4个数中最大值的类模板程序. 1 #include <iostream> 2 3 using namespace std; 4 5 template <class T> 6 7 class Max4 8 { 9 T a, b, c, d; 10 T Max(T a, T b) 11 { 12 return (a > b) ? a : b; 13 } 14 public: 15 Max4(T, T, T, T); 16 T Max(vo

C++程序设计方法4:模板特化

模板参数的具体化/特殊化 有时,有些类型不适用,则需要对模板进行特殊化处理,这称为"模板特化" 对函数模板,如果有多个模板参数,则特化时必须提供所有参数的特例类型,不能部分特化: 如: char *sum(char *,char *); 在函数名后用<>括号括起具体类型 template<> char* sum<char*>(char* a,char* b){...} 由编译器推导出具体的类型,函数名为普通形式: template<> c

网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板

第10单元 - 单元作业:OJ编程 - 创建数组类模板 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 本单元作业练习创建模板类.单元作业会涉及冒泡排序.线性查找等算法.如果对排序.查找不熟悉,可以自行baidu或者google 依照学术诚信条款,我保证此作业是本人独立完成的. 1 编写一个数组类模板 Array,能够存储不同类型的数组元素.对数组元素进行查找.

C++程序设计方法4:成员函数模板

成员函数的模板: 普通类的成员函数,也可以定义为函数模板,如: class normal_class { public: int value; template<typename T> void set(T const &v) { value = int(v);//在类内定义 } template<typename T> T get(); }; template<typename T> T normal_class::get() {return T(value)

Part10 泛型程序设计与C++标准模板库 10.1泛型程序设计及STL的结构

1泛型程序设计的基本概念泛型程序设计: 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 术语:概念用来界定具备一定功能的数据类型.例如: 将"可以比大小的所有数据类型(有比较运算符)"这一概念记为Comparable 将"具有公有的复制构造函数并可以用'='赋值的数据类型"这一概念记为Assignable 将"可以比大小.具有公有的复制构造函数并可以用'='赋值的所有数据类型&quo

函数模板与类模板

函数模板,顾名思义,是在生成函数时依照的模板. 有时,我们需要对不同的数据类型做同样的函数操作. 比如:分别对一个int类型数 和 一个double类型数求平方. 这时,虽然都是同样的求平方操作(函数体内代码一样),但是我们必须要编写两个不同的函数,因为处理int类型的函数的参数和返回值类型都应该是int,而处理double类型的函数的参数和返回值都应该是double. 如下:函数体内操作代码一样,设计为重载函数,用相同的函数名,但是参数类型和返回值类型却都不一样,函数需要定义两次. int S

[2016-04-23][C++类模板的一些事儿]

定义(关于类模板和模板类) 类模板:在类里面使用了 模板类型,即满足如下结构就是类模板 template <typename T> class Array{ T* p; } ; 模板类:类模板实例化之后的对象就叫模板类 使用 实例化必须指定类型, 通过 类名后面加上 <类型> 来指明类型 Array<int> a; 注意 没有指定类型是不能实例化的, 没有实例化的变量是不能使用的!!! template <typename T> T a; cin>&g

c++学习笔记啊——类模板(1)

模板 模板是泛型编程的基础,能够处理在编译时不知道类型的情况 (1)模板函数 模板函数(function template) 一个模板函数就是一个公式,可以用来生成针对特定类型的函数版本,如下compare模板的例子 1 template < typename T > 2 int compare(const T&v1,const T&v2) 3 { 4 //其实只要返回一个值,后面的就不会再执行了 5 if(v1v2) return 1; 6 return 0; 7 } 函数说