博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CPP_类模板与模板类
阅读量:6950 次
发布时间:2019-06-27

本文共 2322 字,大约阅读时间需要 7 分钟。

hot3.png

类模板与模板类

1 模板类的使用

#include 
using namespace std;template
class Test{private: T _t;public: Test(T t); void my_echo();};template
Test
::Test(T t):_t(t)//在实现成员函数时做参数化列表赋值{ cout<<"_t="<<_t<
============================================================================================

2 类模板与模板类的概念

⑴什么是类模板

一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。
  如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。

⑵类模板定义

定义一个类模板,一般有两方面的内容:

A. 首先要定义类

其格式为:
template 
class foo{……}
foo 为类名,在类定义体中,如采用通用数据类型的成员,函数参数的前面需加上T,其中通用类型T可以作为普通成员变量的类型,还可以作为const和static成员变量以及成员函数的参数和返回类型之用。例如:
template
class Test{private: T n; const T i; static T cnt;public: Test():i(0){} Test(T k); ~Test(){} void print(); T operator+(T x);};

B. 在类定义体外定义成员函数

在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则除了需要和一般类的体外定义成员函数一样的定义外,还需在函数体外进行模板声明
例如
template
void Test
::print(){ std::cout<<"n="<
<
如果函数是以通用类型为返回类型,则要在函数名前的类名后缀上“<T>”。例如:
template
Test
::Test(T k):i(k){n=k;cnt++;}template
T Test
::operator+(T x){ return n + x;}

C. 在类定义体外初始化const成员和static成员变量

在类定义体外初始化const成员和static成员变量的做法和普通类体外初始化const成员和static成员变量的做法基本上是一样的,唯一的区别是需在对模板进行声明

例如

template
int Test
::cnt=0;template
Test
::Test(T k):i(k){n=k;cnt++;}

D. 类模板的使用

类模板的使用实际上是将类模板实例化成一个具体的类,它的格式为:类名<实际的类型>。

模板类是类模板实例化后的一个产物。说个形象点的例子吧。我把类模板比作一个做饼干的模子,而模板类就是用这个模子做出来的饼干,至于这个饼干是什么味道的就要看你自己在实例化时用的是什么材料了,你可以做巧克力饼干,也可以做豆沙饼干,这些饼干的除了材料不一样外,其他的东西都是一样的了。

3 类模板的派生

  可以从类模板派生出新的类,既可以派生类模板,也可以派生非模板类。派生方法:

⑴ 从类模板派生类模板可以从类模板派生出新的类模板

它的派生格式如下例所示:
template 
class base{……}; template
class derive:public base
{……};
与一般的类派生定义相似,只是在指出它的基类时要缀上模板参数,即base<T>。

类模板派生非模板类

从类模板派生非模板类  可以从类模板派生出非模板类,在派生中,作为非模板类的基类,必须是类模板实例化后的模板类,并且在定义派生类前不需要模板声明语句:template<class>。例如:

template 
class base{……}; class derive:public base
{……};
在定义derive类时,base已实例化成了int型的模板类。

转载于:https://my.oschina.net/crooner/blog/147396

你可能感兴趣的文章
白帽子也能迎娶白富美:2017八大高薪信息安全认证
查看>>
大数据市场交易趋旺物联网平台争夺加剧
查看>>
CIO:互联网IT系统和传统企业IT系统的异同
查看>>
Go 语言的垃圾回收算法被吹过头?与Java比如何?
查看>>
《Cisco安全防火墙服务模块(FWSM)解决方案》——2.6 硬件架构
查看>>
逼死强迫症?聊聊应用推送角标的那些事儿
查看>>
FileZilla Client 3.26.1 发布,FTP 解决方案
查看>>
《Web前端工程师修炼之道(原书第4版)》——互联网与Web
查看>>
《应用时间序列分析:R软件陪同》——2.11 习题
查看>>
C++工厂方法模式
查看>>
举例说明jquery插件的编写方法
查看>>
英特尔逆天原型机:在 Android 上跑 Debian
查看>>
区块链+”来了,区块链金融将如何颠覆传统金融
查看>>
Perl 语言流行度处于历史最低点
查看>>
Apache Qpid Proton 0.16.0,轻量通信库
查看>>
《Adobe Premiere Pro CC经典教程(彩色版)》——第2课 设置项目 2.1 开始
查看>>
将 iOS 软件移植到 Windows 10 的桥梁将很快打通
查看>>
《高度安全环境下的高级渗透测试》—第1章1.5节安装OpenOffice
查看>>
中国互联网今日正式满 20 岁
查看>>
《I'm a Mac:雄狮训练手册》——2.3 账户类型
查看>>