第一个模板类(templetclass elemType class xxxxx)
小弟是刚刚加入c++大队的,对c++中的基本知识只是稍微懂一点。今天在看《c++ primer》中的模板类时,就将其中的程序在vs 2008中写下,新建了Array.h和Array.cpp两个文件。
主函数:
2 #include <iostream>
3 #include "Array.h"
4
5 using namespace std;
6 int main(int argc, char *argv[])
7 {
8 Array<char> array;
9 cout<<array.size()<<endl;
10
11 char z;
12 cin >>z;
13 return 0;
14 }
15
16
头文件:
2
3
4 template<class elemType>
5 class Array
6 {
7 public:
8
9 explicit Array(int sz=DefaultArraySize);
10 Array(Array<elemType> *array ,int array_size);
11 Array(const Array &rhs);
12
13 ~Array(void);
14
15 //判断是否相等操作
16 bool operator==(const Array&)const;
17 bool operator!=(const Array&) const;
18
19 //赋值操作符
20 Array& operator =(const Array&);
21 int size() const{return _size;};
22
23 elemType& operator[](int index);
24 void sort();
25 elemType min();
26 elemType max() ;
27 //************************************
28 // Method: find
29 // FullName: IntArray::find
30 // Access: public
31 // Returns: int
32 // Qualifier:查找数组中是否存在特定的值。
33 // Parameter: int value
34 //************************************
35 int find(const elemType &value);
36 protected:
37 void Init(int sz,elemType *array);
38
39 private:
40 static const int DefaultArraySize=12;
41 int _size;
42 elemType *ia;
43 bool sorted;
44 };
45
Array头文件的实现:
2 #include "Array.h"
3 #include <cassert>
4
5 template<class elemType> Array<elemType>::Array(int sz)
6 {
7 Array<elemType>::Init(sz,0);
8 }
9
10
11 template<class elemType> Array<elemType>::Array(Array<elemType> *array ,int array_size)
12 {
13 Array<elemType>::Init(array_size,array);
14 }
15
16
17 template<class elemType> Array<elemType>::Array(const Array<elemType> &rhs)
18 {
19 Array<elemType>::Init(rhs.size(),rhs.ia);
20 }
21
22 template<class elemType> Array<elemType>::~Array(void)
23 {
24 delete []ia;
25 std::cout<<"析构函数作用中。。。。。"<<std::endl;
26 }
27 template<class elemType>
28 void Array<elemType>::Init(int sz,elemType *array)
29 {
30 _size =sz;
31 ia=new elemType[_size];
32 sorted=false;
33
34 for (int ix=0;ix<_size;++ix)
35 {
36 if (!array)
37 ia[ix]=0;
38 else
39 ia[ix]=array[ix];
40 }
41 }
42 template<class elemType>
43 elemType& Array<elemType>::operator [](int index)
44 {
45 assert(index>0||index<size());
46 return ia[index];
47 }
48
49
50 //************************************
51 // Method: find
52 // FullName: IntArray::find
53 // Access: public
54 // Returns: int
55 // Qualifier:查找数组中是否存在特定的值。
56 // Parameter: int value
57 //************************************
58 template<class elemType>
59 int Array<elemType>::find(const elemType &value)
60 {
61 for (int ix=0;ix<_size;++ix)
62 {
63 if(ia[ix]==value)
64 return ix+1;
65 }
66 }
67 template<class elemType>
68 elemType Array<elemType>::max()
69 {
70 return ia[0];
71 }
72
73 template<class elemType>
74 elemType Array<elemType>::min()
75 {
76 return ia[size()-1];
77 }
78
79 template<class elemType>
80 void Array<elemType>::sort()
81 {
82 elemType temp;
83 //如果已经排序,返回。
84 if(sorted)
85 return;
86
87 for (int i=0;i<size()-1;++i)
88 {
89 for(int j=1;j<size()-i;++j)
90 {
91 if(ia[i]<ia[j])
92 {
93 temp=ia[j];
94 ia[j]=ia[i];
95 ia[i]=temp;
96 }
97 }
98 }
99
100
101 //设置为以排序。
102 sorted =true;
103 }
104
105
但是在编译的时候vs 2008提示“错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall Array<char>::~Array<char>(void)" (??1?$Array@D@@QAE@XZ),该符号在函数 _main 中被引用 Esonion.obj Esonion" 。
到网上找了好久,才找到原来是vs 2008不支持模板定义和实现分离。将Array.cpp的内容拷贝到Array.h中,在编译就可通过了。我在c-free中试了,也是不可以。看来这两个编译器都不支持模板定义和实现分离。
特意记下来,c++学习路上的一个脚印。
转载于:https://www.cnblogs.com/mht_two/archive/2010/10/10/1847338.html
第一个模板类(templetclass elemType class xxxxx)相关推荐
- C++数据结构之顺序表(模板类实现)
[重要说明]:本文章主要转自以下地址,在其基础上改用模板类实现,仅供学习使用,如有侵权请联系删除. C++ 类实现线性表_wwxy1995的博客-CSDN博客_c++实现线性表 list.h头文件-- ...
- Google Test(GTest)使用方法和源码解析——模板类测试技术分析和应用
写C++难免会遇到模板问题,如果要针对一个模板类进行测试,似乎之前博文中介绍的方式只能傻乎乎的一个一个特化类型后再进行测试.其实GTest提供了两种测试模板类的方法,本文我们将介绍方法的使用,并分析其 ...
- c++ 以模板类作为参数的模板
我想写一个以模板类做为参数的模板,,可惜...没成功. 1.从模板参数到模板:这个简单: //类A是一个模板 template<class T> class A{ } ; //类B,想使用 ...
- C++模板类注意事项
最近使用C++模板,虽然工作几年了,但是模板用的很少,确切的说自己实现的机会很小. 昨天写了一个代码maxheap.h 中实现了类模板的声明,我将实现写在maxheap.cpp中, 当在main.cp ...
- “模板类与友元”那些事(C++)
2019独角兽企业重金招聘Python工程师标准>>> 模版类就是类模版实例化之后的类,友元就是一种对函数访问权限的控制,通过将函数设为友元函数让其能够访问其他外部函数不能访问的&q ...
- 链表操作---面向过程--到---面型对象---到模板类
设计一个链表操作,从分设计到实现分别从3个step进行 (1)面向过程的程序设计---结构体+函数 /* 链表操作-----step1-----用结构体实现链表操作链表设计----需求分析 1.创建 ...
- 学习笔记-----C++模板类中友元函数重载输出运算符时提示无法解析的外部符号解决方案
今天在写单向链表实现线性表的时候打算重载输出运算符用来将线性表输出,结果无奈又遇到了问题. 大致代码如下 <pre name="code" class="cpp&q ...
- 单链表的C++实现(采用模板类)
采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作. 链表结构定义 定义单链表 ...
- Windows动态定义模板类对象
调试MFC线程结构体发现结构体定义的全局对象找不到定义处,跟踪代码找到宏调用处,通过宏调用完成动态定义模板对象. 宏定义如下: //第一个参数为 类名称 //第二个参数为 模板类型 //第三个参数为 ...
最新文章
- jsp使用mysql技术分页_JSP分页技术实现
- mysql三范式和反三范式_数据库三范式和反三范式
- OpenCV图像处理使用笔记(八)——Sobel算子
- wdatepicker设置时间范围_Parker590+在直流电机控制系统中的应用、设置及常见故障排除(中)...
- [hadoop] kettle spoon 基础使用 (txt 内容抽取到excel中)
- everything便携版和安装版区别_什么是超极本?超极本和笔记本的区别科普知识...
- pandas拉长dataframe
- iOS-单例设计模式
- python中and和or的惰性求值特点_python中的惰性求值
- CxImage 初识
- 热门的Linux运维管理面板全面汇总
- CyanogenMod12编译教程
- postfix邮箱服务器安装和配置
- The specified target project directory 项目名\src\main\resources does not exist 问题解决
- JSON学习思维导图
- 如何打造抖音爆款内容,从而快速热门涨粉丨国仁网络
- CVE-2021-1647:Microsoft Defender远程代码执行漏洞通告
- Maven(Maven是干什么用)
- 华为手机扫描文档的三种方法
- 映美Jolimark 24针打印机驱动