初步C++类模板学习笔记
类模板
实现:在上课时间的定义给它的一个或多个参数,这些参数代表了不同的数据类型。 -->抽象的类。
在调用类模板时, 指定參数, 由编译系统依据參数提供的数据类型自己主动产生对应的模板类 -->详细的类。
类模板的定义
C++的类模板的写法例如以下:
template <类型參数表> //类型參数表的写法就是:class 类型參数1, class 类型參数2, …
class 类模板名
{
成员函数和成员变量
};
类模板里的成员函数, 如在类模板外面定义时,
template <型參数表>
返回值类型 类模板名<类型參数名列表>::成员函数名(參数表)
{
……
}
用类模板定义对象的写法例如以下:
类模板名 <真实类型參数表> 对象名(构造函数实际參数表);
假设类模板有无參构造函数, 那么也能够仅仅写:
类模板名 <真实类型參数表> 对象名;
举例:
template <class T1, class T2>
class Pair{
public:
T1 key; //keyword
T2 value; //值
Pair(T1 k,T2 v):key(k),value(v) { };
bool operator < (const Pair<T1,T2> & p) const;
}; template<class T1,class T2> //在类外定义 Pair的成员函数 operator <
bool Pair<T1,T2>::operator<( const Pair<T1, T2> & p) const
{ return key < p.key; }
Pair类模板的使用:
int main()
{
Pair<string, int> student("Tom",19);
//实例化出一个类 Pair<string, int>
cout << student.key << " " << student.value;
return 0; }
函数模版作为类模板成员
#include <iostream>
using namespace std;
template <class T>
class A{
public:
template<class T2>
void Func(T2 t) { cout << t; } //成员函数模板
};
int main(){
A<int> a;
a.Func('K'); //成员函数模板 Func被实例化
return 0;
}
类模板与非类型參数
template <class T, int size>
class CArray{
T array[size];
public:
void Print( )
{
for(int i = 0; i < size; ++i)
cout << array[i] << endl;
}
};
CArray<double, 40> a2;
CArray<int, 50> a3;
注意:
CArray<int,40>和CArray<int,50>全然是两个类
这两个类的对象之间不能互相赋值
类模板与继承
普通类从模板类派生
template <class T>
class A { T v1; int n; };
class B:public A<int> { double v; };// 类A是个类模板。A<int>是模板类
int main() {
B obj1;
return 0;
}
类模板从模板类派生
template <class T1, class T2>
class A { T1 v1; T2 v2; }; template <class T>
class B:public A<int, double> { T v; };
int main() { B<char> obj1; return 0; }
类模板A ->实例化 模板类A<int,double> ->派生 类模板B ->实例化 模板类B<char>
此时B中有成员
{
int v1;
double v2;
T v;
}
类模板从普通类派生
class A { int v1; };
template <class T>
class B:public A { T v; };
int main() {
B<char> obj1;
return 0;
}
没什么可说的。在继承A的基础上添加了T类型的成员。
类模板从类模板派生
#include <iostream>
using namespace std;
template <class T1, class T2>
class A
{
public:
T1 v1; T2 v2;
}; template <class T1, class T2>
class B:public A<T1,T2>
{
public:
T1 v3; T2 v4;
}; int main()
{
B<int,double> b;
B<int,double> *pb = &b;
b.v1 = 1;
b.v3 = 3;
b.v2 = 2.2;
b.v4 = 4.4;
cout << pb->v1<<endl;
cout << pb->v2<<endl;
cout << pb->v3<<endl;
cout << pb->v4<<endl; return 0;
}
要保证当给类模板B实例化的时候。类模板A也随之完毕类型T的实例化。
B<int,double> b 时,B有自身的成员int v3 、double v4 也有继承A<int,double>的成员int v1 和 double v2
初步C++类模板学习笔记的更多相关文章
- 《C++ Primer Plus》14.4 类模板 学习笔记
14.4.1 定义类模板下面以第10章的Stack类为基础来建立模板.原来的类声明如下:typedef unsigned long Item; class Stack{private: enum ...
- 初步C++运算符重载学习笔记<3> 增量递减运算符重载
初步C++运算符重载学习笔记<1> 初探C++运算符重载学习笔记<2> 重载为友元函数 增量.减量运算符++(--)分别有两种形式:前自增++i(自减--i).后自增i ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- python 面向对象(类)--学习笔记
面向对象是一种编程方式, 主要集中在类和对象的两个概念 python 中的类符合封装, 继承, 多态的特征 类 是一个模板, 是n多函数的集成 对象 是类的实例化 类的成员分为三大类:字段.方法.属性 ...
- C++模板学习笔记
一个有趣的东西:实现一个函数print, 输入一个数组, 输出数组的各个维度长度. eg. ], b[][], c[][][]; print(a); //(2, 4) print(b); //(3, ...
- 初探C++类模版学习笔记
类模板 实现:在定义类的时候给它一个或多个參数,这个些參数表示不同的数据类型. -->抽象的类. 在调用类模板时, 指定參数, 由编译系 ...
- C++Array类模板编写笔记
C++Array类模板 函数模板和类模板都属于泛型技术,利用函数模板和类模板来创建一个具有通用功能的函数和类,以支持多种不同的形参,从而进一步简化重载函数的函数体设计. 声明方法:template&l ...
- c++类的学习笔记
用结构体数据的安全性得不到保证. 使用类对数据进行封装,只能通过函数修改类中的数据 (1)类的定义 class 类名 { private: protected: public: }; private: ...
- tornada模板学习笔记
import tornado.web import tornado.httpserver import tornado.ioloop import tornado.options import os. ...
随机推荐
- 产生n不同随机数的算法
昨天无聊,就模仿仙剑5外传中的卡牌游戏做了一个小游戏,结果在开发这个小游戏的时候,碰到了产生多个不同随机数的问题.我们知道,仙剑中的卡牌游戏是随机产生16张图片,并且这16张图片是两个一组的,因为只有 ...
- Androidproject夹
创建一个Android应用 File -> New -> Android Application Project 填写应用名称.project名称.包名 设置project的相关信息.默认 ...
- delphi 使用superobject实现jsonrpc的http远程调用 good
http://blog.csdn.net/earbao/article/details/46423167
- linux内核函数之 blk_plug
分析: /* * blk_plug permits building a queue of related requests by holding the I/O * fragments for a ...
- Android本地视频播放器开发--简易播放器原型
在以前的基础上,将音视频进行合并,音频播放采用OpenSL ES,视频播放采用OpenGL ES2.0进行显示,这次的版本其中音频和视频是在同一个线程,会造成音频断断续续,后续会采用音频使用SDL,视 ...
- Linux几种关机(重启)相关命令
在linux下一些常用的关机/重启命令有shutdown.halt.reboot.及init,它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的,通过本文的介绍,希望你可以更加灵活的运用各 ...
- C++ STL copy函数效率分析
在C++编程中,经常会配到数据的拷贝,如数组之间元素的拷贝,一般的人可能都会用for循环逐个元素进行拷贝,在数据量不大的情况下还可以,如果数据量比较大,那么效率会比较地下.而STL中就提供了一个专门用 ...
- Net 通常用于dll 第三方插件
log4net.dll ----记录日志 本人用能够 pangu.dll ----分词工具 用于高级搜索 拆分字词 能够非常好用 fastreport --------高速制作报表工具 本人仅仅做过 ...
- hdu-4418-Time travel-高斯+概率dp
把N个点先转化为2*N-2个点. 比方说把012345转化成0123454321. 这样,就能够找出随意两两个点之间的关系. 然后依据关系能够得出来一个一元多项式的矩阵. 然后就用高斯消元求出矩阵就可 ...
- http_load安装与测试参数分析 - 追求自由自在的编程 - ITeye技术网站
http_load安装与测试参数分析 - 追求自由自在的编程 - ITeye技术网站 http_load -p 50 -s 120 urls