C++模板类复习

//C++模板类复习

#include<iostream>

using namespace std;

template <class T1, class T2 = string>

class test

{

private:

T1 temp1;

T2 temp2;

public:

test(){}

test(T1 data1, T2 data2):temp1(data1),temp2(data2){}

void show();

};

template <class T1, class T2>  //定义模板类成员

void test<T1, T2>::show()

{

cout << "原始类" << endl;

cout << temp1 << endl << temp2 << endl;

}

template <> //显示具体化

class test<int, int>

{

private:

int temp1;

int temp2;

public:

test(){}

test(int one, int two):temp1(one), temp2(two){}

void show()

{

cout << "具体化" << endl;

cout << temp1 << endl << temp2 << endl;

}

};

template <class T>

class test<T, double>

{

private:

T temp1;

double temp2;

public:

test(){}

test(T data1, double data2):temp1(data1), temp2(data2){}

void show()

{

cout << "部分具体化" << endl;

cout << temp1 << endl << temp2 << endl;

}

};

template class test<double, double>; //模板类的显示具体化和显示实例化不会冲突,因为显示具体化不会创建类声明

//将模板类作为内置成员

template <class T1>

class test1

{

private:

template <class T2>

class test2

{

private:

T2 data2;

public:

test2(){}

test2(T2 d):data2(d){}

void show2()

{

cout << data2 << endl;

}

};

test2<T1> data1;

public:

test1(T1 d):data1(d){}

void show1()

{

data1.show2();

}

};

template <template <class T1, class T2> class te>

class test3

{

private:

te<int, int> a;

public:

test3(te<int, int> d):a(d){}

void show1()

{

a.show();

}

};

int main()

{

//test<int> a(1, "linukey");//第二个参数将用默认参数string

//a.show();

//test<double, double> a(5, 6);//隐式实例化

//a.show();

//test<int,int> a(5, 6);//因为有了int,int 的显示具体化,所以此次使用具体化类

//a.show();

//test<int, double> a(1, 2.1);//部分具体化

//a.show();

//test1<int> a(1); //模板类作为类内置成员

//a.show1();

//test<int, int> a(1, 2);  //模板类作为参数

//test3<test> b(a);

//b.show1();

return 0;

}

时间: 2024-10-06 10:01:03

C++模板类复习的相关文章

C++智能指针模板类复习

//C++智能指针模板类复习 #include<iostream> #include<memory> using namespace std; //智能指针用于确保程序不存在内存和资源泄漏且是异常安全的. //C++98中提供了auto_ptr,C++11摒弃了auto_ptr,并提出了unique_ptr .shared_ptr.weak_ptr void show1() { int* p = new int(4); cout << *p << endl;

第六周项目6-复数模板类

阅读教材例10.1.该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的.可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时指定的实际类型. (1)要求类成员函数在类外定义. (2)在此基础上,再实现减法.乘法和除法 你可以使用的main()函数如下. int main( ) { Complex<int> c1(3,4),c2(5,-10),c3; //实部和虚部是int型 c3=c1.complex_add(c2); cout<

模板类的友元重载

模板类的友元重载和普通类的友元重载有不同之处,可以参考这篇CSDN博客http://blog.csdn.net/ozwarld/article/details/7770808 #include <iostream> using namespace std; template <class T> class Test; // 模板类前置声明 template<class T> ostream& operator << (ostream& out

C++ 模板函数与模板类

一.模板函数 函数模板提供了一类函数的抽象,即代表了一类函数.当函数模板被实例化后,它会生成具体的模板函数.例如下面便是一个函数模板: 当实际调用它时,就会生成具体的模板函数:    模板函数在调用过程中会进行数据类型的自动匹配(在不产生歧义的情况下),但如果需要指定类型的话,可以显示声明,如: 这样,函数模板中的T就会被double所代替. 自动匹配有以下的规则: 1) 函数实参是否满足模板的实参(此时的判断没有数据类型的转换): 2) 若不满足1), 函数实参进行数据转换在进行匹配: 3)

一个数组类【模板类】

这学期的大作业感觉挺简单的,就是写一个模板类MyList,实现一些Python中的list的操作(类似于c++中的vector,但是不支持迭代器).这些功能都很简单,唯一麻烦的就是模板类特别烦,特别是友元函数,首先要声明这个类,然后声明是函数的声明,然后是类中友元函数的声明,最后是实现.友元函数的声明还有一个问题就是声明时在函数名后面要加上一个<>就像这样: friend void Qsort<>(T a[],int low,int high,bool less); 还有一个要注意

C++中的链表节点用模板类和用普通类来实现的区别

C++中的链表节点通常情况下类型都是一致的.因此我们可以用模板来实现. #include <iostream> using namespace std; template<typename Type>//定义一个模板类必须有的声明 class LinkNode //表示链表节点的类 { public: LinkNode() :m_pnext(nullptr){}//构造函数,在函数体内实现的相当于默认在前面加了inline关键字修饰 LinkNode(Type item, Link

模板类的定义和实现可以不在同一个文件中

写c++程序时我们经常会把函数的定义写在xxx.h中,把函数的实现写在xxx.cpp, 但是当我们写带模版的函数和类时,这样写 就会出现问题,如下: stack.h //stack.h #ifndef STACK_HPP #define STACK_HPP #include <vector> #include <stdexcept> template<typename T, typename TContainer = std::vector<T>> clas

模板类的全特化、偏特化

我们先来定义一个普通的模板类 1 template<class T> 2 struct Test 3 { 4 Test(){ cout << "模板类" << endl; } 5 }; 我们再来调用一下: 1 int main() 2 { 3 Test<char> t1; 4 Test<int> t2; 5 Test<int *> t3; 6 return 0; 7 } 输出的结果1: 模板类 模板类 模板类 如果

Vector模板类

1 #include "stdafx.h" 2 typedef int Rank; //秩 3 #define DEFAULT_CAPACITY 3 //默认的初始容量(实际应用中可设置为更大) 4 5 template <typename T> class Vector 6 { //向量模板类 7 protected: 8 Rank _size; int _capacity; T* _elem; //规模.容量.数据区 9 void copyFrom(T const* A