C++ 模板类demo
#include <iostream>
using namespace std; template <typename T>
class MyVector
{ friend ostream & operator<< <T>(ostream &out, const MyVector &obj);
public:
MyVector(int size = ); //构造函数
MyVector(const MyVector &obj); // 拷贝构造函数
~MyVector(); //析构函数 public: T& operator[] (int index);//返回引用
// a3 = a2 = a1;
MyVector &operator=(const MyVector &obj); public:
int getLen()
{
return m_len;
} protected:
T *m_space;
int m_len;
};
#include <iostream>
using namespace std;
#include "MyVector.h" template <typename T>
ostream & operator<<(ostream &out, const MyVector<T> &obj)
{
for (int i=; i<obj.m_len; i++)
{
out << obj.m_space[i] << " ";
//out << t1;
}
out << endl;
return out;
} //MyVector<int> myv1(10);
template <typename T>
MyVector<T>::MyVector(int size) //构造函数
{
m_space = new T[size];
m_len = size;
} //MyVector<int> myv2 = myv1;
template <typename T>
MyVector<T>::MyVector(const MyVector &obj) // 拷贝构造函数
{
//根据myv1的大小分配内存
m_len = obj.m_len;
m_space = new T[m_len]; //copy数据
for (int i=; i<m_len; i++)
{
m_space[i] = obj.m_space[i];
} } template <typename T>
MyVector<T>::~MyVector() //析构函数
{
if (m_space != NULL)
{
delete [] m_space;
m_space = NULL;
m_len = ;
}
} template <typename T>
T& MyVector<T>::operator[] (int index)
{
return m_space[index];
} // a3 = a2 = a1;
template <typename T>
MyVector<T> & MyVector<T>::operator=(const MyVector<T> &obj)
{
//先把a2的旧的内存释放掉 if (m_space != NULL)
{
delete[] m_space;
m_space = NULL;
m_len = ;
} //根据a1分配内存
m_len = obj.m_len;
m_space = new T[m_len]; //copy数据
for (int i=; i<m_len; i++)
{
m_space[i] = obj[i];
}
return *this; // a2 = a1; 返回给a2 的自身
}
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std; #include "MyVector.cpp" //1 优化Teacher类, 属性变成 char *panme, 购置函数里面 分配内存
//2 优化Teacher类,析构函数 释放panme指向的内存空间
//3 优化Teacher类,避免浅拷贝 重载= 重写拷贝构造函数
//4 优化Teacher类,在Teacher增加 <<
//5 在模板数组类中,存int char Teacher Teacher*(指针类型) //=====>stl 容器的概念 class Teacher
{
public:
Teacher()
{
age = ;
strcpy(name, "");
} Teacher(char *name, int age)
{
this->age = age;
strcpy(this->name, name);
}
void printT()
{
cout << name << ", " << age << endl;
}
private:
int age;
//char name[32];
char *pName2;
}; void main()
{
Teacher t1("t1", ), t2("t2", ), t3("t3", ), t4("t4", ); MyVector<Teacher> tArray(); tArray[] = t1;
tArray[] = t2;
tArray[] = t3;
tArray[] = t4; for (int i=; i<; i++)
{
Teacher tmp = tArray[i];
tmp.printT();
}
cout << tArray; system("pause");
}
void main02()
{
MyVector<char> myv1();
myv1[] = 'a';
myv1[] = 'b';
myv1[] = 'c';
myv1[] = 'd'; cout << myv1; system("pause");
} void main01()
{
MyVector<int> myv1(); for (int i=; i<myv1.getLen(); i++)
{
myv1[i] = i+;
cout << myv1[i] << " ";
}
cout << endl; MyVector<int> myv2 = myv1;
for (int i=; i<myv2.getLen(); i++)
{
cout << myv2[i] << " ";
} cout << myv2 << endl; cout<<"hello..."<<endl;
system("pause");
return ;
}
C++ 模板类demo的更多相关文章
- C++_类入门5-智能指针模板类
智能指针是行为类似于指针的类对象,但这种对象还有其他功能. 本节介绍三个可帮助管理动态内存分配的智能指针模板(auto_ptr.unique_ptr和shared_ptr). void remodel ...
- 单链表的C++实现(采用模板类)
采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作. 链表结构定义 定义单链表 ...
- 模板类 error LNK2019: 无法解析的外部符号
如果将类模板的声明和实现写在两个独立的文件中,在构建时会出现"error LNK2019: 无法解析的外部符号 "的错误. 解决方法有: 第一种方法,就是把类模板中成员函数的声明和 ...
- 关于g++编译模板类的问题
今天搞了我接近4个小时,代码没错,就是调试没有通过,无论怎么也没有想到是编译器的问题 g++不支持c++模板类 声明与实现分离,都要写到.h文件里面. 以后记住了.
- C++11特性(模板类 initializer_list)
[1]initializer_list模板类 C++primer 原文如下: 通读原文相关篇幅,分析解读内容如下: 提供initializer_list类的初衷,为了便于将有限个同一类型(或可转换为同 ...
- C++11模板类使用心得
1.推荐使用std::shared_ptr<TaskT>代替指针TaskT*使用,shared_ptr是一种智能指针,能自主销毁释放内存,在c++11中被引入,在多线程编程中有很大的用处, ...
- c++模板类
c++模板类 理解编译器的编译模板过程 如何组织编写模板程序 前言常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”.看看我们几乎每天都能遇到的模板类吧,如S ...
- C++ 模板函数与模板类
一.模板函数 函数模板提供了一类函数的抽象,即代表了一类函数.当函数模板被实例化后,它会生成具体的模板函数.例如下面便是一个函数模板:
- 模板类重载<<运算符
写了一个Matrix模板类,需要重载<<, 1.需要友元函数 2.需要此函数的实现在.h中(本人试验出来的,放在.cpp中编译不通过) template <typename T> ...
随机推荐
- HDU5777 domino (BestCoder Round #85 B) 思路题+排序
分析:最终的结果肯定会分成若干个区间独立,这些若干个区间肯定是独立的(而且肯定是一边倒,左右都一样) 这样想的话,就是如何把这n-1个值分成 k份,使得和最小,那么就是简单的排序,去掉前k大的(注意l ...
- HDU 4911 Inversion
http://acm.hdu.edu.cn/showproblem.php?pid=4911 归并排序求逆对数. Inversion Time Limit: 2000/1000 MS (Java/ ...
- ASIHTTPREQUEST 文档
http://blog.csdn.net/ysysbaobei/article/details/17026577 Please note that I am no longer working on ...
- Web自动化框架搭建——前言
1.web测试功能特性 a.功能逻辑测试(功能测试),这一块所有系统都是一致的,比如数据的添加.删除.修改:功能测试案例设计感兴趣和有时间的话可以另外专题探讨: b.浏览器兼容性测试,更重要的是体验这 ...
- 【转载】【内存对齐(二)】__declspec( align(#) )的用法和大小计算
转自:http://www.cppblog.com/deercoder/archive/2011/03/13/141747.html 感谢作者! 在上面讲到了关于pack的内存对齐和计算方法,这里继续 ...
- ARM体系的异常中断
在ARM体系中,通常有3种方式控制处理器的流程 1:在正常执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加四个字节,在每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节,整个过 ...
- android 拍照或者图库选择 压缩后 图片 上传
通过拍照或者从相册里选择图片通过压缩并上传时很多应用的常用功能,记录一下实现过程 一:创建个临时文件夹用于保存压缩后需要上传的图片 /** * path:存放图片目录路径 */ private Str ...
- 5个让人激动的Java项目
每个Java/JVM领域的技术专家都应从那些项目中获益,他们中有2011在SanJose举办的Jax 会议中提名为最好的技术产品奖的.我之所以选择它们,是因为它们可以广泛用于一系列的项目中,解决真实问 ...
- Spring4整合Hibernate4详细示例
1. Spring整合Hibernate,主要是解决什么问题? a.让Spring提供的IOC容器来管理Hibernate的SessionFactory b.让Hibernate使用Spring提供的 ...
- Web Service学习之五:WSDL详解
WSDL是Web Service定义文档,不同平台 不同语言实现Web Service遵循的共同协议 ,在解析XML时按照各自语言的特点解析成相应的具体类.方法.参数和数据类型. WSDL是一个XML ...