C++学习34 模板类】的更多相关文章

C++除了支持模板函数,还支持模板类.模板类的目的同样是将数据类型参数化. 声明模板类的语法为: template<typename 数据类型参数 , typename 数据类型参数 , …> class 类名{ //TODO: }; 模板类和模板函数都是以 template 开头,后跟数据类型参数列表:数据类型参数不能为空,多个参数用逗号隔开. 一但声明了模板类,就可以用数据类型参数来声明类中的成员变量和成员函数.也就是说,原来使用C++内置类型(比如 int.float.char 等)的地…
#include<iostream>#include<typeinfo>#include<cstring> using namespace std; class A{public: A(int x, int y) :m_x(x), m_y(y) { } int compare(void) { cout << "Type of m_x is" << typeid (m_x).name() << endl; cout…
一.模板类的说明 模板类有一个好处是可以放宽你输入的数据类型. 比如有这样的一个函数: int add(int x, int y) { return x+y; } 这个函数对于int类型的x,y才适合,但是如果我们希望计算float类型的呢? 这必须重新定义一个函数(函数重载也可以实现) float add(float x, float y) { return x+y; } 但是这样显然太麻烦,所以模板类可以解决这个问题 二.一个例子 书上的一个例子用作说明 #include <iostream…
背景是这样的,有两个不同的公司,然后想设计一个MessageSender,为这两个公司发送不同的消息,既支持明文发送SendClearText,也支持密文发送SendEncryptedText.一种思路是采用动态绑定的方法,定义一个BasicMessageSender,里面有两个方法,分别是发送明文和密文的虚函数,然后定义它的子类MessageSenderForCompanyA,以及MessageSenderForCompanyB,在这两个子类里面覆盖发送明文和密文的虚函数,从而达到根据不同公司…
类模板的目的 设计通用的类型式,以适应广泛的成员数据型式 类模板的定义格式 template<模板形式参数列表>class 类名称{...}; 原型:template<typename T> class A; 类模板的成员 像普通类的成员一样定义 定义在类中或类外均可,后者需要在类名后列些模板参数,以区别非模板类的成员函数 template<typename T> T A<T>::f(u) 类成员函数的模板 成员函数可以使用其他模板 template<…
使用模板能够极大到使得代码可重用. 记录一下,方便后续使用. 1. 函数模板,支持多种类型参数 #include <stdio.h> #include <math.h> //函数模板 template <class T> T add(T a, T b){ return a + b; } //函数模板特殊化 template <> double add<double>(double a, double b){ return floor(a + b)…
与任何其他类相同,类模板可以声明 static 成员: template <typename T> class Foo { public: static std::size_t count() { return ctr; } void addctr() { ctr++; } void subctr() { ctr--; } private: static std::size_t ctr; // 下面可以有其他成员接口 }; template <typename T> std::si…
当一个类包含一个友元声明时,类与友元各自是否是模板是相互无关的.如果一个类模板包含一个非模板友元,则友元被授权可以访问所有模板实例.如果友元自身是模板,类可以授权给所有友元模板实例,也可以只授权给特定实例. 1. 一对一友好关系 类模板与另一个(类或函数)模板间友好关系的最常见形式是建立对应实例及其友元间的友好关系.例如,我们的 Blob 类应该讲 BlobPtr 类和一个模板版本的 Blob 相等运算符定义为友元. 为了引用(类或函数) 模板的一个特定实例,我们必须首先声明模板自身.一个模板声…
最近在学习缓存方面的知识,了解了缓存(Cache)的基本概念,为什么要使用缓存,以及一些缓存算法(缓存替换),如LRU.LFU.ARC等等. 这些缓存算法的实现过程会使用一些基本的数据结构,如list.map等.STL提供了一些标准的容器模板类可以拿来使用,我要在QT环境下测试,所以就近学习一下QT的容器类,如QList.QMap等. 可在QT官方帮助文档中关键词搜索“Container Classes” 这些容器类的设计比STL容器更轻,更安全,更易于使用. 如果您不熟悉STL,或者喜欢以“Q…
6.3 类模板和模板类 所谓类模板,实际上是建立一个通用类,其数据成员.成员函数的返回值类型和形参类型不具体指定,用一个虚拟的类型来代表.使用类模板定义对象时,系统会实参的类型来取代类模板中虚拟类型从而实现了不同类的功能. 定义一个类模板与定义函数模板的格式类似,必须以关键字template开始,后面是尖括号括起来的模板参数,然后是类名,其格式如下: template <typename 类型参数> class 类名{       类成员声明 }; 或者 template <class…