浅显易懂的单模版类——————(与函数模版的区别)

  • 模版类是抽象的,必须进行具体类型,而函数模版则不一定

#include<iostream>
#include<string>
using namespace std;

template < typename T>//定义模版不能加分号
class A
{
public:
	A(T a)
	{
		this->a = a;
	}
	T &get()
	{
		return a;
	}
private:
	T a;
};
int main()
{
	A<int> a1(10); // 这里必须写上<>里面的内容!
	cout << a1.get() << endl;

	A<char> a2(‘l‘);
	cout << a2.get() << endl;

	A<string > a3("love");
	string temp=a3.get() ;
	cout << temp << endl;
	system("pause");
}

  

  • 函数模版不允许自动类型转换,必须严格按照类型匹配----这里的意思是如果模版类要求两个参数的类型一致,则调用函数必须符合这个要求。
  • 普通函数则可以进行自动类型的转化。
#include<iostream>
using namespace std;

template <typename T>
void Staff(T a, T b)
{
	cout << "a= " << a << " b = " << b << endl;
	cout << "我只是一个普通的函数模版、\n";
}

void  Staff(int a, char b)
{
	cout << "a= " << a << " b = " << b << endl;
	cout << "我只是一个普通的函数\n";
}
int main()
{
	int x = 101;
	char y = ‘a‘;
	int z = 100;

	Staff(x, y);//调用的普通函数
	Staff(y, x); 调用的普通函数,普通函数可以自动类型转化
	Staff(x, x);  调用的函数模版  函数模版不可以自动类型的转化
	system("pause");
}

  

时间: 2024-10-29 19:12:04

浅显易懂的单模版类——————(与函数模版的区别)的相关文章

c++ 类模版、成员函数模版、函数模版 用法

C++函数模版与类模版. template <class T> void SwapFunction(T &first, T &second){ }//函数模版 template <class T>//类模版 class CTemplate{ public: void SWap(T &first, T &second){ } }; #include <iostream> class Single{ public: static Single

C++编译器函数模版机制剖析 - 函数模版的本质

思考:为什么函数模板可以和函数重载放在一块.C++编译器是如何提供函数模板机制的? demo 1 #include <cstdio> #include <iostream> using namespace std; // 1.cpp // g++ -S 1.cpp -o 1.s template <typename T> void myswap(T &a, T &b) { T c = 0; c = a; a = b; b = c; cout <&l

单例类的总结

/** * 单例类的两种方法. * 1.饿汉式 * 当类一加载就开始创建对象 * 2.懒汉式 * 当需要使用到类的对象是调用类的类方法才开始创建对象,想比较上面而言是 * 懒汉式. * 注意,单例类的特点: * 1.必须要将构造函数私有化,这样才能防止别的类通过构造方法来建立对象,但是也是因为如此,所以 * 单例类的成员变量和成员函数都必须要用static修饰,因此要想调用单例类的函数,只能通过类名.类方法的方式来进行 * 调用. * 2.必须要在类内创建一个本类的对象. * 3.向外提供一个公

9秒学院C++模版类实现单链表

先上代码 /********************************线性表抽象类的定义***************************/ template <class dataType> class list{ public: virtual void empty()=0;   //清空线性表 virtual int getLength()=0;   //求表的长度 virtual void insert(int i,const dataType& x)=0;   //

C++ 类模板二(类模版与友元函数)

//类模版与友元函数 #include<iostream> using namespace std; template<typename T> class Complex{ public: Complex(T a,T b); void Print() const//const修饰的是this指针 { cout << this->Real << ":" <<this->Image<< endl; } /*

C++泛型函数及模版类

什么是泛型编程? 简单来说,泛型编程,意思就是针对广泛类型的编程方式.具体类型可以有不同的实现方式,但是针对广泛类型编程,就能在需要调用时才指定参数类型或者调用类型. 泛型编程是一种基于发现高效算法的最抽象表示的编程方法.也就是说,以算法为起点并寻找能使其工作并且有效率的工作的最一般的必要条件集. 可以想象的是,很多算法都需要相同的必要条件集,并且这些必要条件集有不同的实现方式.STL标准模版库就是泛型编程的例子. 泛型函数怎么写? #include<iostream> using names

3.1.2 函数模版与类模版

一.函数模版 比较两个数的大小. 代码: #include <iostream> using namespace std; template <typename T> inline int myCompare(const T &a, const T &b) { if(a > b) return 1; else if(a < b) return -1; else return 0; } int main() { cout << myCompar

【C++】模版类实现普通类静态顺序表

在C或C++里,我们已经学会了如何实现一个静态顺序表了,那为何还要引入模版类来实现静态顺序表呢?首先,我们看,在未引入模版前,我们在C++里是这样定义一个静态顺序表的: typedef int DataType;    //此时我定义的是int型 class SeqList {     DataType* _array;     size_t _size;     size_t _capacity; } 我们若要定义char型或者其他类型的,可以采用typedef了,这就是使用typedef的优

函数 的 重载 和 函数 模版

1 //函数的重载对一个函数名 赋予它 多重意义 就成为函数的重载 2 //在函数重载的基础上 我们仍然对那种 实现功能相似 3 // 但是 函数类型和形参不确定的 情况下 产生了 函数 模版 4 #include<iostream> 5 using namespace std; 6 template<class T> //模版声明 其中 T 为类型参数 7 T max(T a,T b,T c) //定义一个 通用模版 8 { 9 if(b>a) 10 a=b; 11 if(