阿刚编程遇到的小问题集合~ 以后回顾用
类模板的声明与实现
C++模板类是不能定义在源文件的。
1.这是不允许的,因为模板类的成员函数的定义,是一种不完整的定义.
2.由于编译器不知道模板参数的具体类型,无法为其成员函数生成代码.
3.编译器在成员函数的调用处,才最终知道如何生成代码.
总之,模板类的成员函数的定义不能像普通类的成员函数一样,定义在源代码中,而只能定义在头文件中.
一下例子将会出现错误:
//文件Compare.h
#ifndef _COMPARE_H
#define _COMPARE_H
template
class Compare
{
public:
~Compare(void);
Compare(T,T);
T max();
T min();
private:
T x;
T y;
};
#endif
//文件Compare.cpp
#include"Compare.h"
template
Compare::Compare(T a,T b)
{
x=a;
y=b;
}
template
Compare::~Compare(void)
{
}
template
T Compare::max()
{
return (x>y)?x:y;
}
template
T Compare::min()
{
return (x>y)?y:x;
}
//文件main.cpp
#include
using namespace std;
#include"Compare.h"
int main()
{
Compare tt(1,2);
cout<<tt.max()<<endl;
system(“pause”);
getchar();
return 0;
}
这样做是会报错的哟~模板嵌套(即模板里面再定义模板,实现的时候具体的写法)!
类模板的嵌套调用:前几天写binary tree的时候,有一个现象百思不得解,就是在模板类里面定义了模板函数,那这个函数在实现的时候时怎么样的呢?
template
class Myclass
{
public:
T a;
template <typename type_1 , typename type_2>
type_1 add(const type_1 lva ,const type_2 rva);
};
上述的模板类,里面嵌套定义了模板函数,怎么去实现呢?
template
template <typename type_1,typename type_2>//这里时我当时疑惑的地方
type_1 Myclass::add(const type_1 lva, const type_2 rva)
{
a = lva + rva;
return a;
}
当时自己写的方式为template<class T ,typename type_1, typename type_2>,这显然没有理解模板参数的定义,模板参数定义后,其作用域范围是接下来的类或者函数。然后模板可以嵌套定义。
再来一个更复杂的例子:
template
class Myclass
{
public:
T a;
template <typename type_1 , typename type_2>
type_1 add(const type_1 lva ,const type_2 rva);
template <class type_3>class Myclass_2; // 声明放在这里,具体定义放在类外进行。Myclass_2<T> C; // 定义一个Myclass_2 类 A。使用 T 进行实例化
};
template
template <typename type_1,typename type_2>
type_1 Myclass::add(const type_1 lva, const type_2 rva)
{
a = lva + rva;
return a;
}
template
template
class Myclass::Myclass_2
{
public:
type_3 value;
type_3 sub(const type_3 a , const type_3 b) {vlaue = a - b;}
};
建议别这么搞,要是类型匹配不上,那你真的脑壳痛~
阿刚编程遇到的小问题集合~ 以后回顾用相关推荐
- 多线程编程学习笔记——使用并发集合(三)
接上文 多线程编程学习笔记--使用并发集合(一) 接上文 多线程编程学习笔记--使用并发集合(二) 四. 使用ConcurrentBag创建一个可扩展的爬虫 本示例在多个独立的即可生产任务又可消费 ...
- 核桃编程学python吗_学编程要趁早?对话核桃编程X支付宝 “小程序编程马拉松”三强得主...
原标题:学编程要趁早?对话核桃编程X支付宝 "小程序编程马拉松"三强得主 来源:网络 浏览专业IT技术社区网站,创作沉浸式互动体验游戏,开发辟谣小程序......这并不是程序员大神 ...
- 零基础如何高效学习Java 成就我的10个编程学习实用小技巧
这几天有很多小伙伴私信问我:我最近开始学习编程,但是感觉自己的学习效率特别的低,你是怎么学习编程的呢,有什么好的学习方法,如何高效的学习编程,学习编程有什么方法论吗? 我回顾了一下自己从学习编程到一直 ...
- 零基础如何高效学习编程|成就我的10个编程学习实用小技巧
这几天有很多小伙伴私信问我:老鬼呀,我最近开始学习编程,但是感觉自己的学习效率特别的低,你是怎么学习编程的呢,有什么好的学习方法,如何高效的学习编程,学习编程有什么方法论吗? 我回顾了一下自己从学习编 ...
- 全栈工程师15年经验分享:40个改变编程技能的小技巧
白交 发自 凹非寺 量子位 报道 | 公众号 QbitAI 编程如何节省更多的时间,犯更少的错误? 最近,这样一份「心得」火了.这位名叫Kesk Noren的软件工程师在Medium上分享了一篇博文 ...
- 15年经验分享:40个改变编程技能的小技巧
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法那些事 编程如何节省更多的时间,犯更少的错误 ...
- 11个提升编程能力的小方法
编程是当今社会最为实用的技能之一.从能够创造一个公司网站到知道怎么修复一个重定向错误,这些技能带来的价值,不管是对雇主还是对程序员自身,都是无法估量的. 但是,保持你当前的状态,停滞不前,那你永远无法 ...
- c++游戏代码大全_还在学少儿编程?不如来玩工厂编程师,免费学编程逻辑的小游戏...
40000+游戏爱好者已加入我们! 每天推荐好玩游戏! 加入我们,沐沐带你发现好游戏! <工厂编程师>游戏小程序好玩吗? <工厂编程师>小游戏怎么玩? 只有你想不到, 没有我找 ...
- 大三软件工程小项目-小技术集合总结
大三软件工程小项目-小技术集 此篇文章是给出了此小项目用到的技术的总结: 方便自己有忘记的知识点后方便查阅. 也方便有需要的博友看. 下面是各个计算的链接 大家点击了进能进去 大三软件工程小项目-小技 ...
最新文章
- AI一分钟 | 阿里NLP技术连破两项世界纪录,玉泉一号AI试验卫星明年发射
- SAP HUM 将HU与交货单解绑
- Swift字典Dictionary快速文档
- 【转】SQL 语句执行顺序
- 1.c++模式设计-简单工厂模式
- 物联网大数据平台软件开发架构案例解析
- Android Service: 启动service, 停止service
- 初学linux网络服务之HTTP服务实验
- 解决Eclipse开发工具Debug调试JDK源码无法查看变量值
- 字节高工强推 “Android学习视频教程631部,文末有链接哦”
- steam授权文件_幼儿园STEAM教育的活动设计研究
- Proe/Creo经典曲面造型实战案例大合集
- “磁碟机”病毒分析报告
- 软件项目管理随谈(2)——项目合同问题
- 【项目复习篇】EGO电商项目技术总结与学习笔记
- 三国论(16-20章)
- 微信圣诞头像来了,快给你的头像带上圣诞帽吧
- 电脑linux 开启热点hostapt,Ubuntu16.04开启热点
- java计算机毕业设计基于安卓Android的社交app-社会交友app
- 技侦十所 技侦科技局