模板(下)——(类模板)
时间:2022-07-24
本文章向大家介绍模板(下)——(类模板),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
类模板
声明类模板
类模板的成员函数被认为是函数模板,也称为类属函数。 声明类模板的一般格式如下:
template 类型形参表
class 类名
{
类声明体;
};
template 类型形参表
返回类型 类名 类型名表::成员函数1(形参表)
{
成员函数定义体;
};
template 类型形参表
返回类型 类名 类型名表::成员函数2(形参表)
{
成员函数定义体;
};
……
template 类型形参表
返回类型 类名 类型名表::成员函数n(形参表)
{
成员函数定义体;
};
注意:类型形参表中的形参需要加class或typename等关键词。
使用类模板
声明类模板之后创建模板类,一般格式如下:
类模板名<类型实参表>对象表;
其中,类型实参表应与该类模板中的“类型形参表”相匹配。“对象表”是定义该模板类的一个或多个对象。 例:
#include<iostream>
using namespace std;
template <class T>
class Array
{
int size;
T *aptr;
public:
Array(int slots = 1)
{
size = slots;
aptr = new T[slots];
}
void fill_Array();
void disp_Array();
~Array()
{
delete[] aptr;
}
};
template <class T>
void Array<T>::fill_Array()
{
cout << "(输入:" << size << "个数据)" << endl;
for (int i = 0; i < size; i++)
{
cout << "第" << i + 1 << "个数据:";
cin >> aptr[i];
}
}
template <class T>
void Array<T>::disp_Array()
{
for (int i = 0; i < size; i++)
cout << aptr[i] << " ";
cout << endl;
}
void main()
{
Array<char> ac(5);//Array<char>为类模板,ac(5)定义模板类的对象
cout << "填充一个字符数组";
ac.fill_Array();
cout << "数组的内容是:";
ac.disp_Array();
Array<double> ad(4);
cout << "填充一个字符数组";
ad.fill_Array();
cout << "数组的内容是:";
ad.disp_Array();
system("pause");
}
类模板作为函数参数
函数的形参类型可以是类模板或类模板的引用,对应的实参应该是该类模板实例化的模板类对象。同时,对于带有类模板参数的函数,这个函数必须是函数模板。
类模板作为友元函数的形参类型
在一个类模板中可以设计友元函数。友元函数的形参类型可以是类模板或类模板的引用,对应的实参应该是该类模板实例化的模板类对象。同时,对于带有类模板参数的友元函数,这个友元函数必须是函数模板。
类模板与静态成员
从类模板实例化的每个模板类都有自己的类模板静态数据成员,该模板类的所有对象共有一个静态数据成员。
#include<iostream>
using namespace std;
template <class T>
class A
{
T m;
static T n;
public:
A(T a):m(a) { n += m; }
void disp(){ cout << "m=" << m << ",n=" << n << endl; }
};
template <class T>
T A<T>::n = 0;
void main()
{
A<int> a(2), b(3);
a.disp();
b.disp();
A<double> c(1.2), d(4.6);
c.disp();
d.disp();
system("pause");
}
类模板与无类型参数
在类模板中可以用无类型参数,即值参数,一般将无类型参数当做const处理,对这类参数不能取地址操作。
#include<iostream>
using namespace std;
template<class T,int size=10>
class A
{
T *p;
public:
A(T *q)
{
p = new T[size];
for (int i = 0; i < size; i++)
p[i] = *q++;
}
void disp()
{
int i;
for (int i = 0; i < size; i++)
cout << p[i];
cout << endl;
}
};
void main()
{
int a[] = { 1, 2, 4, 6, 8, 9, 5, 3 };
char *b = "kiuygtrmjnhg";
A<int, 5> s1(a);
cout << "a:"; s1.disp();
A<char> s2(b);
cout << "b:"; s2.disp();
system("pause");
}
上边程序,类模板A就有一个带有默认值的无类型参数size,在定义s2对象时,就使用了默认值,结果输出10个字符。
- 统计02:怎样描绘数据
- ActiveMQ笔记(1):编译、安装、示例代码
- centos ssh终端下高亮显示git分支名
- Django ORM模型:想说爱你不容易
- IE7下元素的 'padding-top' 遇到 'clear' 特性在某些情况下复制到 'padding-bottom'
- IE7下元素的 'padding-top' 遇到 'clear' 特性在某些情况下复制到 'padding-bottom'
- ARM处理器:开放者的逆袭
- 从5个方面对比微信小程序和App
- ActiveMQ笔记(7):如何清理无效的延时消息?
- JS魔法堂:再识Bitwise Operation & Bitwise Shift
- Hadoop(十三)分析MapReduce程序
- mac机上搭建php56/nginx 1.8.x/thinkphp 3.2.x/gearman扩展/seaslog扩展/redis扩展环境
- 基础野:细说无符号整数
- Ubuntu12.04安装QQ for Linux
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 几个好看的Seaborn图样~(虽然官方配色一般般,但我还是忍不住夸它)
- GDAL读取MAIAC的HDF文件(熟肉)
- Google Earth Engine(GEE)-谷歌地球引擎的大致Python入门
- 谷歌地球引擎(Google Earth Engine)之数据初探(栅格和矢量)
- Python-gdal离线文档下载
- 利用python把shp文件写入PostgresSQL数据库
- python调用cmd运行GDAL报错解决:ERROR 1: PROJ
- Tungsten Fabric知识库丨测试2000个vRouter节点部署
- 一行代码快速图像识别~一排代码搞定视频识别
- Python测试开发django5.urls.py参数name与<a>标签的引用
- Pytest配置文件pytest.ini
- 移植uc/OS-III最新版到小熊派开发板(STM32L431)
- phpStudy默认配置致Nginx解析漏洞复现
- HW|蓝队实战溯源反制手册分享
- 工具开发|Burp插件Unexpected_information