类模板

第七章 课后习题

匿名 (未验证) 提交于 2019-12-03 00:32:02
一、名词解释 函数模板:一个带类属参数的函数; 类模板: 一个带类属参数的类; 模板函数:通过参数实例化可以再构造出具体的函数; 模板类: 通过参数实例化可以再构造出具体的类; 二、填空题 (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 )

C++模板

匿名 (未验证) 提交于 2019-12-03 00:30:01
1 #ifndef TEMPLATE_DEMO_HXX 2 #define TEMPLATE_DEMO_HXX 3 4 template<class T> class A{ 5 public: 6 T g(T a,T b); 7 A(); 8 }; 9 10 #endif 1 #include<iostream.h> 2 #include "TemplateDemo.h" 3 4 template<class T> A<T>::A(){} 5 6 template<class T> T A<T>::g(T a,T b){ 7 return a+b; 8 } 9 10 void main(){ 11 A<int> a; 12 cout<<a.g(2,3.2)<<endl; 13 } 1 --------------------Configuration: TemplateDemo - Win32 Debug-------------------- 2 Compiling... 3 TemplateDemo.cpp 4 G:\C++\CDaima\TemplateDemo\TemplateDemo.cpp(12) : warning C4244: 'argument' : conversion from 'const double' to 'int', possible loss of

第七章习题

匿名 (未验证) 提交于 2019-12-03 00:27:02
一、名词解释 函数模板:一个带类属参数的函数; 类模板: 一个带类属参数的类; 模板函数:通过参数实例化可以再构造出具体的函数; 模板类: 通过参数实例化可以再构造出具体的类; 二、填空题 (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

Problem D: 分数类的模板数组类

匿名 (未验证) 提交于 2019-12-03 00:26:01
Problem D: 分数类的模板数组类 Time Limit: Memory Limit: 128 MB Submit: Solved: 1591 [ Submit ][ Status ][ Web Board ] Description 封装一个模板数组类Array,支持一下操作: 1. 构造函数Array(int n),将数组初始化为n个存储空间; 2. 函数input(int n),读取最多n个元素,但不能超过数组存储空间的上限; 3. 重载下标运算符,返回数组的元素。 封装一个分数类Fract,用来处理分数功能和运算,能支持你的Array类使用。 1. 构造:传入两个参数n和m,表示n/m;分数在构造时立即转化成最简分数。 2. show()函数:分数输出为“a/b”或“-a/b”的形式,a、b都是无符号整数。若a为0或b为1,只输出符号和分子,不输出“/”和分母。 3. 在分数类上重载+=运算符,进行分数的加法运算。 ----------------------------------------------------------------------------- 你设计两个类:Array类和Fract类,使得main()函数能够运行并得到正确的输出。调用格式见append.cc Input 输入为两部分,分别是一组实数测试样例和一组复数测试样例。

第七章 习题

匿名 (未验证) 提交于 2019-12-03 00:22: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、template

类模板

时光总嘲笑我的痴心妄想 提交于 2019-12-01 09:50:42
类模板 #include "stdafx.h" #include using namespace std; template class A { public: A(double r1,double i1) { r = r1; i = i1; } //simple print(); simple print(); void print(simple c1); public: simple c; double r; double i; }; template simple A::print() { cout << "r="<<r<<endl; cout << "i="<<i << endl; return 0; }; template void A::print(simple c1) { c = c1; cout <<"c="<< c << endl; }; int main() { Af(5.3, 4); f.print(); f.print(545.6); while (1); return 0; } 来源: https://www.cnblogs.com/tangjunjun/p/11676627.html

面向对象——对象的创建和使用

帅比萌擦擦* 提交于 2019-11-30 04:22:39
创建对象 使用 new + 构造器创建一个新的对象; 举例 Animal xb=new Animal(); 对象的使用 使用 “对象名 . 对象成员”的方式访问对象成员(包括属性和方法) 创建对象过程 1) 在永久区中检查要创建的对象所属的类模板是否存在 . 2) 如果不存在 , 则由类加载器 (ClassLoader) 加载类模板 3) 如果类模板已经存在 , 就不加载了 , 保证类模板只有一个 . 4) 依据类模板中所有的属性的定义信息 , 在 GC 堆中开辟一块内存 5) 把此空间中的数据全部写 0, 结果就是所有属性自动拥有了缺省值 0 6) 检查属性是否有显式赋值 , 如果有就执行显式赋值 7) 执行构造方法 8) 把对象的地址返回给调用者 ** )类模板:在内存中的类的基本信息。包括初始的属性和方法 来源: https://www.cnblogs.com/houwenbo/p/11559495.html

C++模板、类模板、函数模板详解都在这里了

北战南征 提交于 2019-11-29 09:28:26
一、引言 在写排序算法时,如果要写一个交换两个数据的函数,由于基本数据类型有int、float、double等等类型,所以针对每种数据类型可能我们要写很多swap函数,这些函数除了传入的数据类型不同,函数体结构大致相同。所以C++为了避免让程序员写很多大量重复代码,设计了一种叫做“模板”的东西。我们写程序时,先不指定什么类型,在调用时我们再说明一下是什么类型,具体怎么实现接着往下看。 二、函数模板 1、定义 像开头所说,如果要对int、double类型的两个数进行交换我们要写两个函数,但用函数模板时只需要写一个函数即可。模板定义如下: template <typename T> 或者 template <class T> 其中,template是声明一个模板,typename是声明一个虚类型T,这个T可以代替int、double等基本数据类型,那为什么还有class?因为最初是用class声明一个T来表示通用数据类型,但考虑到class会和“类”混淆,就改用typename进行定义,同时保留了class,这两者效果相同,但我个人比较习惯用class。 在进行声明模板之后下面就开始写模板的函数体了,例如交换函数,合起来就是: template <class T> void swap(T *p1,T *p2){ T temp=*p1; *p1=*p2; *p2=temp; }

【C++】C++中的类模板

瘦欲@ 提交于 2019-11-27 15:35:44
基础的类模板 模板类的继承 内部声明定义普通模板函数和友元模板函数 内部声明友元模板函数+外部定义友元模板函数 声明和定义分别在不同的文件(模板函数、模板友元) C++中有一个重要特性,那就是模板类型。类似于Objective-C中的泛型。C++通过类模板来实现泛型支持。 1 基础的类模板 类模板,可以定义相同的操作,拥有不同数据类型的成员属性。 通常使用template来声明。告诉编译器,碰到T不要报错,表示一种泛型. 如下,声明一个普通的类模板: template <typename T> class Complex{ public: //构造函数 Complex(T a, T b) { this->a = a; this->b = b; } //运算符重载 Complex<T> operator+(Complex &c) { Complex<T> tmp(this->a+c.a, this->b+c.b); return tmp; } private: T a; T b; } int main() { //对象的定义,必须声明模板类型,因为要分配内容 Complex<int> a(10,20); Complex<int> b(20,30); Complex<int> c = a + b; return 0; } 2 模板类的继承 在模板类的继承中,需要注意以下两点:

类模板 与 模板类

末鹿安然 提交于 2019-11-27 08:48:01
1. 类模板与模板类的概念 ⑴ 什么是类模板 一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。 如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。 ⑵ 类模板定义 定义一个类模板,一般有两方面的内容: A. 首先要定义类,其格式为: template <class T> class foo { …… } foo 为类名,在类定义体中,如采用通用数据类型的成员,函数参数的前面需加上 T ,其中通用类型 T 可以作为普通成员变量的类型,还可以作为 const 和 static 成员变量以及成员函数的参数和返回类型之用。例如: template<class T> class Test{ private: T n; const T i; static T cnt; public: Test():i(0){} Test( T k); ~Test(){} void print(); T operator+( T x); }; B. 在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则除了需要和一般类的体外定义成员函数一样的定义外