类模板

学习:类模板

守給你的承諾、 提交于 2019-12-05 07:36:33
类模板的使用: 类模板作用: 建立一个通用类,类中的成员 数据类型可以不具体制定,用一个虚拟的类型来代表。 在自己看来是给自己创建的类来使用的模板 语法: template<typename T> 类 解释: template --- 声明创建模板 typename --- 表面其后面的符号是一种数据类型,可以用class代替 T --- 通用的数据类型,名称可以替换,通常为大写字母 示例代码 #include<iostream> #include<string> using namespace std; template<class NameType, class AgeType> //定义一个类模板 class Person { public: Person(NameType name, AgeType age) { this->age = age; this->name = name; } void showinfo() { cout << this->age << endl; cout << this->name << endl; } public: NameType name; AgeType age; }; void test01() { Person<string, int>p1("adexx", 18); p1.showinfo(); } int main() {

C++函数模板和类模板的使用

柔情痞子 提交于 2019-12-05 07:27:37
一、函数模板 #include<iostream> using namespace std; template<class T1,class T2> T1 add(T1 x,T2 y) { cout<<"("<<sizeof(T1)<<","<<sizeof(T2)<<")\t"; return x+y; } int main() { cout<<add(9,8)<<endl; cout<<add(9.0,8.0)<<endl; cout<<add(9,8.0)<<endl; cout<<add(9.0,8)<<endl; cout<<add('A','A'-'0')<<endl; cout<<add(short(8),9)<<endl; return 0; } 二、类模板 #include<iostream> #include<cstdio> using namespace std; template<class TNO,class TScore,int num> class Student { private: TNO StuID[num]; TScore score[num]; public: void Put(); void Sort(); }; template<class TNO,class TScore,int num> void Student<TNO,TScore

C++初阶模板

吃可爱长大的小学妹 提交于 2019-12-05 04:48:17
初阶模板分为从三个方面了解:1. 泛型编程 2. 函数模板 3. 类模板 。 1. 泛型编程: 不考虑数据类型,大家都能用的编程技巧。 如何实现一个通用的交换函数?重载需要重复声明定义,而且函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数 ,代码的可维护性比较低,一个出错可能所有的重载均出错。 C++中提供类模板来实现泛型编程。 模板有函数模板和类模板。 2. 函数模板: 概念: 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。 格式: template<typename T1, typename T2,......,typename Tn> 返回值类型 函数名(参数列表){} template<typename T1> //参数类型个数可以是很多个 T1 Add(const T1& left, const T1& right) //参数能给引用尽量给引用,提高效率 { //对于不需要修改形参的函数,可以用const修饰形参 return left + right; } int main() { int i = Add(1, 2); //如实是传常量,模板函数参数列表的参数必须加const double d = Add(2.1, 1.2); //不是常量则模板函数参数列表不加const

类模板——C++11(十一)

[亡魂溺海] 提交于 2019-12-05 03:38:11
//类型模板参数 template<typename T> class Vector { private: T* elem; int sz; } Vector<string> sv; //值模板参数 template<typename T, int N> struct Buffer { using value_type = T; //别名 constexpr int size() { return N; } //只读访问模板参数 T[N]; } 来源: https://www.cnblogs.com/share-ideas/p/11902346.html

第二章:C++泛型机制的基石:数据类型表——《C++泛型:STL原理和应用》读书笔记整理

◇◆丶佛笑我妖孽 提交于 2019-12-04 20:12:53
第二章:C++泛型机制的基石——数据类型表 2.1 类模板的公有数据类型成员 2.1.1 类的数据类型成员   C++类中不仅可以定义数据成员和函数成员,而且还可以定义数据类型成员。在泛型设计中,类的数据类型成员是一个常用的感念。所谓类的数据类型成员,就是在一个类中使用typedef定义一个已知数据类型的别名。例如: typedef long double LDBL   在C++中,这种在类模板中定义的数据类型也称nested type(嵌入式类型)。既然nested type与字段、方法都属于类成员,那么当然可以为它们赋予响应的 访问属性 。于是,这些具有public属性的类型成员就成为类外部模块可以使用的公有类型成员。显然,外部模块就可以通过这些公有类型成员,实现与类模板之间的功能 协作 。 template<typename T1, typename T2> class MyTraits{ public: typedef T1 my_Type1; typedef T2 my_Type2; }; int main(int argc, char** argv){ //类外引用类模板的公有类型成员,与引用静态成员一样。 //为了区别,需要加上typename关键字 typename MyTraits<int, double>::my_Type1 t1; typename

C++ 类模板

 ̄綄美尐妖づ 提交于 2019-12-04 16:25:47
类模板 函数声明和函数实现必须写一个文件里 实现的函数,必须加上template<typename T, int Ksiez, int Kval> 这样的定义 #include <iostream> #include <cstdlib> using namespace std; //.h 声明 template<typename T, int Ksiez, int Kval> class Myarray { public: Myarray(); ~Myarray() { delete mpArr; } void display(); private: T *mpArr; }; //cpp 这叫定义 template<typename T, int Ksiez, int Kval> Myarray<T, Ksiez, Kval>::Myarray() { mpArr = new T[Ksiez]; for (int i = 0; i < Ksiez; ++i) { mpArr[i] = Kval; } } template<typename T, int Ksiez, int Kval> void Myarray<T,Ksiez,Kval>::display() { for (int i = 0; i < Ksiez; ++i) { cout<<mpArr[i]<<endl; } }

类欧几里得算法模板

雨燕双飞 提交于 2019-12-04 14:18:12
类欧几里得算法 \(View\) \(Code\) #include<bits/stdc++.h> using namespace std; inline int read() { int ret=0,f=1; char ch=getchar(); while('9'<ch||ch<'0') { if(ch=='-') f=-1; ch=getchar(); } while('0'<=ch&&ch<='9') { ret=(ret<<1)+(ret<<3)+ch-'0'; ch=getchar(); } return ret*f; } inline long long readl() { long long ret=0; int f=1; char ch=getchar(); while('9'<ch||ch<'0') { if(ch=='-') f=-1; ch=getchar(); } while('0'<=ch&&ch<='9') { ret=(ret<<1)+(ret<<3)+ch-'0'; ch=getchar(); } return ret*f; } const int mod=998244353; int T; long long n,a,b,c; long long query(long long a,long long b,long long c,long

威尼斯人源码下载

匿名 (未验证) 提交于 2019-12-03 00:40:02
威尼斯人 源码下载http://hubawl.com/thread-321-1-1.html 普通类函数的定义不能写在头文件中,因为你和类模板不一样,类模板虽然定义了但不生成具体函数,主函数所在的.cpp文件包含这个头文件,会把头文件中的代码都写入到主.cpp中 //普通类的函数就会在头文件和主.cpp文件中定义两次,而类模板在头文件中并不生成具体函数,只在主.cpp文件中生成了具体函数,因此只定义了一次 Animal1::Animal1(int age, string color) { this->age = age; this->color = color; } */ / //普通函数和普通类函数一样 void print111() { cout << "111111" << endl; } / template<class T1, class T2> class Animal2; template<class T1, class T2> void printAnimal(Animal2<T1, T2> &a); //模板类多文件形式声明定义 template<class T1, class T2> class Animal2 { public: Animal2(T1 age, T2 color); void show(); //左移操作符重载只可以写在类外面

C++类模板

匿名 (未验证) 提交于 2019-12-03 00:38:01
原文地址: 点击打开链接 在C++的Template中很多地方都用到了typename与class这两个关键字,有时候这两者可以替换,那么这两个关键字是否完全一样呢?   事实上class用于定义类,在模板引入c++后,最初定义模板的方法为:template<class T>,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,这样在定义模板的时候可以使用下面的方式了:   template<typename T>.在模板定义语法中关键字class与typename的作用完全一样 区分类模板与模板类的概念   一个类模板(类生成类)允许用户为类定义个一种模式,使得类中的某些数据成员、默认成员函数的参数,某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。   如果一个类中的数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表一类类。   类模板定义: 定义一个类模板,一般有两方面的内容: A。首先要定义一个类,其格式为: template<class T> class test { .... } test为类名,在类定义体中

第七章习题

匿名 (未验证) 提交于 2019-12-03 00:34:01
一、名词解释 函数模板:一个带类属参数的函数; 类模板:一个带类属参数的类; 模板函数:通过参数实例化可以再构造出具体的函数; 模板类:通过参数实例化可以再构造出具体的类; 二、填空题 (1)C++支持两种模板,一种是 函数模板 ,另一种是 类模板 。 (2)关键字 template 是定义模板的关键字。 (3)<模板参数表>中包含一个或多个用逗号分开的模板参数项,每项由保留字 class 或者 typename 开始。 (4)重载函数模板便于定义 类属参数 或者函数参数的类型、个数不相同所进行的 类似 操作。 (5)函数模板实例化时, 没有 普通传值参数的类型转换机制。 (6)STL 提供的容器是常用数据结构 的 类模板 。 (7)STL 容器类库中包含7种基本容器。它们可以分成两个组: 顺序容器 和 关联容器 。 (8)STL 迭代器主要包括5中基本类别: 输入迭代器 、输出迭代器 、 前向迭代器 、双向迭代器 和 随机访问迭代器 。 三、选择题(至少选一个,可以多选) (1)关于函数模板,描述错误的是( A ) A.函数模板必须由程序员实例化为可执行的模板函数 B.函数模板的实例化由编辑器实现 C.一个类定义中,只要有一个函数模板,则这个类是类模板 D.类模板的成员雨数都是函数模板,类模板实例化后,成员函数也随之实例化 (2)下列的模板说明中,正确的是( A ) A.