1.运算符重载
[]
=
<<
//重载[]
template <class T>
T & Array<T>::operator[](int index)
{
return ptr[index];
}
//重载赋值运算符=
template <class T>
Array<T> & Array<T>::operator = (const Array<T> & obj)
{
if(size != obj.getsize()){
if(ptr != NULL)
{
delete [] ptr;
ptr = NULL;
size = 0;
}
size = obj.getsize();
ptr = new T[size];
}
for(int i=0; i< size; i++){
ptr[i] = obj[i];
}
return *this;
}
template <class T> class Array;
template <class T>
ostream & operator << (ostream & out, const Array<T> & obj);
template <class T>
ostream & operator << (ostream & out, const Array<T> & obj)
{
for(int i=0; i< obj.size; i++){
out << obj.ptr[i];
//out << obj[i];
}
out << endl;
return out;
}
2.函数模板的编写和调用
template<typename T1, typename T2>
void test(T1 & a, T2 & b){
cout<< a<< " "<<b<<endl;
}
std::string str = "hello";
int var = 5;
test<int , std::string >(var,str);
3.抛异常
double division(int a, int b)
{
if( b == 0 )
{
throw "Division by zero condition!";
}
return (a/b);
}
int main ()
{
...
try {
z = division(x, y);
cout << z << endl;
}catch (const char* msg) {
cerr << msg << endl;
}
...
return 0;
}
4.友元函数和类模板
参考1 重载<< <<运算符不是当前类的重载函数,是系统库 ostream的重载函数。 只能声明成友元函数
类模板实例化 实例化时候是个抽象数据类型,如果是类,还需要类支持 拷贝构造函数 <<
5.智能指针
查询内存泄露方法
https://blog.csdn.net/jcq521045349/article/details/88957222
6. 模板特化
7.可变参数
https://www.cnblogs.com/yongssu/p/4677556.html
//template<typename T1, typename T2>
template<typename T>
void test(T * p){
//cout<< a<< " "<<b<<endl;
cout<< p<< " "<<endl;
}
void test(...){
cout<< "execute multiargs function ----------"<<endl;
}
int main ()
{
...
int * ptr = &var;
test(ptr);
test(var);
return 0;
}