在我们使用类模板时,只有当代码中使用了类模板的一个实例的名字,而且上下文环境要求必须存在类的定义时,这个类模板才被实例化。并不是每次使用一个类都要求知道该类的定义。

(1)声明一个类模板的指针和引用,不会引起类模板的实例化,因为没有必要知道该类的定义。例如:

class Matrix;
Matrix *pm;//不需要类的定义void inverse(Matrix &);//也不需要类的定义

以及

void foo(Queue<int> &qi)
{Queue<int> *pqi = &qi;//...
}

但是如果检查这个指针或引用所值的那个对象时,类模板才会被实例化。比如在上例中,如果指针pqi被解引用,qi被用来获得它所指向的对象值,或者pqi或qi被用来访问Queue<int>的数据成员或成员函数时,Queue<int>才会被实例化。

void foo(Queue<int> &qi)
{Queue<int> *pqi = &qi;//因为成员函数被调用,所以Queue<int>被实例化pqi ->add(255);//...
}

(2)定义一个类类型的对象时需要该类的定义,因此类模板会被实例化、例如:

class Matrix;
Matrix obj1;//Errorclass Matrix{...};
Matrix obj1;//OK

下面的例子中,对象qi的定义引起类模板Queue<int>被实例化:

Queue<int> qi;

(3)在使用sizeof()时,它是计算对象的大小,编译器必须根据类型将其实例化出来,所以类模板被实例化:

int iobj = sizeof(Stack<string>);

(4)new表达式要求类模板被实例化。

Queue<int> *p_qi = new Queue<int>;

(5)引用类模板的成员会导致类模板被编译器实例化。

(6)需要注意的是,类模板的成员函数本身也是一个模板。标准C++要求这样的成员函数只有在被调用或者取地址的时候,才被实例化。(在标准C++之前有些编译器在实例化类模板时,就实例化类模板的成员函数。)用来实例化成员函数的类型,就是其成员函数要调用的那个类对象的类型。

【C++基础学习】引起类模板被实例化情形总结相关推荐

  1. C++学习笔记——类模板

    类模板 类模板的定义和声明 1. 定义 template <typename T> class B {}; 2. 声明 template <typename T> class ...

  2. 【无标题】类模板定义实例化

    类模板详解\n类模板的定义及实例化\ntemplate\u003Cclass 模板参数>\nclass 类名 {\n    // 类定义\n};\n\ntemplate\u003Ctypenam ...

  3. 零基础学python实战-零基础学习python_类和对象(36-40课)

    今天我们开始学习面向对象的知识咯,之前我对面向对象也学的懵懵的,因为感觉知道好像又不是特别清楚,接下来我们一起来学习类和对象吧.零基础的课程我都是看小甲鱼的视频学的,没基础的可以去这个网址下载视频学习 ...

  4. c++面向对象高级编程 学习十一 类模板、函数模板、成员模板

    namespace经验谈: 团队中函数或类的名字可能会冲突,因此使用namespace进行区分. 类模板: template<typename T> 函数模板: template<c ...

  5. Python基础学习:类语法规则

    [类] 一.定义方式: class 类名(object): 二.调用方式: 1.类名() 2.对象 = 类名() #当一个变量 等于 一个类名()  #时它就叫对象 三.方法: 1.公有方法() #方 ...

  6. java string类方法_Java基础学习——String类及其方法

    String类概述 该类被final修饰,无子类,不可被复写.创建的对象一旦初始化,其内容不可被改变. String类复写了Object类中的equals()定义了自己的独特内容,该方法用于判断字符串 ...

  7. 尚硅谷Java基础学习--常用类部分例题解答(仅使用String类方法)

    以下为不借助StringBuffer等类的方法,直接使用String类方法及算法实现: No.1 public class Test1010 {public static void main(Stri ...

  8. C++ 泛型编程(一):模板基础:函数模板、类模板、模板推演成函数的机制、模板实例化、模板匹配规则

    文章目录 泛型编程 函数模板 函数模板实例化 隐式实例化 显式实例化 函数模板的匹配规则 类模板 类模板的实例化 泛型编程 泛型编程旨在削减重复工作,如: 将一个函数多次重载不如将他写成泛型. voi ...

  9. C++学习笔记:类模板

    上一章我们介绍了函数模板,今天这章我们来学习类模板. 类模板声明 template是声明类模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个,可以是**「类型参数」** ,也可以是**非 ...

最新文章

  1. Udacity机器人软件工程师课程笔记(三十二) - 卡尔曼滤波器 - 一维卡尔曼滤波器 - 多维卡尔曼滤波器 - 拓展卡尔曼滤波器(EKF)
  2. Mining of Massive Dataset----PageRank的两种问题spider traps和dead ends
  3. php 区块链算法_PoW/BFT等5种主流区块链共识算法的开源代码实现
  4. hue集成mysql报错_hue集成hive访问报database is locked
  5. 如何在UIimageview里显示一张图片里的某一部分
  6. WEB 开发异常:java.lang.ClassNotFoundException
  7. 谈谈 SAP 系统的权限管控和事务记录功能的实现
  8. CentOS安装网络驱动
  9. java udp 接收16进制,java udp接收16进制乱码
  10. CommandName 与 CommandArgument
  11. UEstudio 注册机使用教程
  12. c语言用switch计算税收,求助。。关于用switch编写简易计算器
  13. 关于以太网卡的组成部分:MAC/PHY/变压器
  14. CSS实现长宽比的几种方案,CSS如何实现长宽比?
  15. python顺时针旋转_python中的绕点旋转(矩阵)
  16. parsec(The parsec benchmark suit )使用教程
  17. 稳中求变,试着提高时间管理能力
  18. 如何修改.json文件的内容?
  19. 12 第十二节课笔记(面向对象编程)
  20. 做Java程序员真的没有春天吗?终局之战

热门文章

  1. 两款高大尚广告GO跳转页PHP源码
  2. python输入身份证号码输出对应的出生年月日_Java从身份证号码,提取用户的出生年月日,输出用户的生日信息。...
  3. 小程序 | 云函数获取用户openid
  4. 频域串联滞后校正matlab,自动控制原理实验七基于MATLAB控制系统频域法串联校正设计.doc...
  5. java 下载图片 弹出框_javaweb多图片打包下载,弹出提示框问题_html/css_WEB-ITnose
  6. Asp.net生成工作流、审批流的解决方案
  7. NET 4.0 System.Threading.Tasks学习笔记
  8. 创建一个 Git 版本库
  9. IE6,7下实现white-space:pre-wrap;
  10. jQuery:无限循环两个或者多个事件 click / toggle between two functions