C++模板之成员模板和模板构造函数
namespace myspace6
{
template<typename T1>
class TC
{
public:
template<typename T2>
TC(T2 v1, T2 v2)
{
cout << "TC(T2 v1,T2 V2)被执行了" << endl;
} TC(T1 v1,T1 v2)
{
cout << "TC(T1 v1,T1 v2)被执行了" << endl;
} TC(double v1, double v2)
{
cout << "TC(double v1, double v2)被执行了" << endl;
}
};
} int main(int argc, char** argv[])
{ myspace6::TC<float> one(1,2);
myspace6::TC<float> two(11.1f,12.3f);
myspace6::TC<float> three(1.1,2.4);
while (1);
return 0;
}
输出结果:
加入构造函数模板:
namespace myspace6
{
template<typename T1>
class TC
{ private:
T1 data; public: template<typename U>
TC(const TC<U>&)
{
cout << "构造函数模板被执行了" << endl;
} void getData()
{
cout << "data=" << data << endl;
} void SetData(T1 x)
{
data = x;
} template<typename T2>
TC(T2 v1, T2 v2)
{
cout << "TC(T2 v1,T2 V2)被执行了" << endl;
} TC(T1 v1,T1 v2)
{
cout << "TC(T1 v1,T1 v2)被执行了" << endl;
} TC(double v1, double v2)
{
cout << "TC(double v1, double v2)被执行了" << endl;
}
};
} int main(int argc, char** argv[])
{ myspace6::TC<float> one(1,2);
myspace6::TC<float> two(11.1f,12.3f);
myspace6::TC<float> three(1.1,2.4); three.SetData(2); myspace6::TC<float> four(three);
four.getData(); while (1);
return 0;
}
输出:
这里可以发现,并没有调用构造函数模板,原因是在构造函数模板中,两个对象的类型不同,而这里的两个对象的类型相同,也就是实际想要调用的是构造函数。但是这里并没有定义构造函数,由于有成员变量,系统采用的是值初始化的方式,换句话说,也就是编译器实际上并没有为我们合成默认的构造函数,因为对于普通的成员变量而言,编译器内部有一定的规则,可以不用调用构造函数,对这些成员变量的初始化同样能够进行。所以这里显示的就是2了。
如果把这里的const去掉,那么情况就会不一样,这是一条规则,如果没有const修饰,那么不管类型相同或者不相同,都会调用构造函数模板.
C++模板之成员模板和模板构造函数的更多相关文章
- 从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...
- 缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...
- C++模板编程中只特化模板类的一个成员函数
模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数.类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1.2个成员函数即可.在这种情况下,如果全 ...
- c++模板类成员的声明和定义
c++模板类成员的声明和定义应该都放在*.h中,有普通类不一样. 如果定义放在*.cpp中,最终链接时,会报方法undefined错误. 参考:http://users.cis.fiu.edu/~we ...
- C++模板编程中只特化模板类的一个成员函数(花样特化一个成员函数)
转自:https://www.cnblogs.com/zhoug2020/p/6581477.html 模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数.类模板中大多 ...
- C++ 模板常见特性(函数模板、类模板)
背景 C++ 是很强大,有各种特性来提高代码的可重用性,有助于减少开发的代码量和工作量. C++ 提高代码的可重用性主要有两方面: 继承 模板 继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的 ...
- 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...
- C++—模板(2)类模板与其特化
我们以顺序表为例来说明,普通顺序表的定义如下: typedef int DataType; //typedef char DataType; class SeqList { private : Dat ...
- C++ 模板的编译 以及 类模板内部的实例化
在C++中.编译器在看到模板的定义的时候.并不马上产生代码,仅仅有在看到用到模板时,比方调用了模板函数 或者 定义了类模板的 对象的时候.编译器才产生特定类型的代码. 一般而言,在调用函数的时候,仅仅 ...
- Handlebars的基本用法 Handlebars.js使用介绍 http://handlebarsjs.com/ Handlebars.js 模板引擎 javascript/jquery模板引擎——Handlebars初体验 handlebars.js 入门(1) 作为一名前端的你,必须掌握的模板引擎:Handlebars 前端数据模板handlebars与jquery整
Handlebars的基本用法 使用Handlebars,你可以轻松创建语义化模板,Mustache模板和Handlebars是兼容的,所以你可以将Mustache导入Handlebars以使用 Ha ...
随机推荐
- 经验:使用mysqlimport快速导入csv文件
mysqlimport 工具实际上也只是"load data infile"命令的一个包装实现.常用选项:--fields-terminated-by=字符串:设置字符串为字段之间 ...
- JAVA中BufferedImage与byte[]转换
BufferedImage转byte[] ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.write(imgBuff, ...
- shell脚本报错:.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录 这是因为shell脚本是Windows下编辑的 格式不一样 执行 sed -i 's/\r$//' 脚本名称.sh
- Centos7使用Docker启动elasticsearch服务秒退
首先查看docker启动日志 docker logs -f 容器id 查看报错信息 OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepG ...
- java源码——0~9十个数字不重复地使用使加法表达式成立
这个问题是在我写个的几个博客里较为复杂的一个.首先,先看看整个问题的表述. 星号表示0~9的一个数字,而且不允许重复,使得下面的加法表达式成立.输出所有结果. ※ ※ ※ ※ ※ + 2 ...
- 【LeetCode】Pascal's Triangle II 解题报告
[LeetCode]Pascal's Triangle II 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/pascals-tr ...
- Codeforces 450C:Jzzhu and Chocolate(贪心)
C. Jzzhu and Chocolate time limit per test: 1 seconds memory limit per test: 256 megabytes input: st ...
- C++输出控制小数点后位数的方法
以C++输出小数点两位数为例 setprecision(n)使用方法总结 首先要记住写头文件 #include <iomanip> //不要忘了头文件 以下是控制小数位数的三种写法 //t ...
- Exponential family of distributions
目录 定义 性质 极大似然估计 最大熵 例子 Bernoulli 指数分布 正态分布 Choi H. I. Lecture 4: Exponential family of distributions ...
- PowerDotNet平台化软件架构设计与实现系列(11):日志平台
所有后端应用几乎都会记录日志,日志系统可以统一抽象出来提供服务. 最近被Log4j2的安全漏洞刷屏了,作为开发人员的我只能咩哈哈几次表示日志处理太难了,只有折腾过的人才知道这里面的艰辛啊. 在实现Po ...