类模板

C++程序设计POJ》《WEEK7 输入输出和模板》《二进制文件读写》《模板》《类模板与派生》

与世无争的帅哥 提交于 2020-04-04 00:44:19
二进制读文件 ifstream fstream 读 ofstream fstream 写 inFile.gcount();//看刚才读了多少个字节 比如快到文件末尾,如果最后只剩8个字节,却要读10个字节,最后只会读8个字节 fstream东西比较全 ‘\0’ 为什么存成.dat格式?比纯文本节省空间,空格也占空间,纯文本是字符串格式 10亿,10个字节,.dat 一个int 4个字节搞定 Jane 本来后面就有个\0 Mike 内存缓冲区 二进制文件和文本文件的区别 二进制读文件 ifstream 和 fstream 的成员函数: istream& read (char* s, long n) 将文件读指针指向的地方的 n 个字节内容,读入到内存地址 s ,然 后将文件读指针向后移动 n 字节 以 ios ::in 方式打开文件时,文件读指 针开始指向文件 开头 。 二进制写文件: ofstream 和 fstream 的成员函数: istream& write (const char* s, long n); 将内存地址 s 处的 n 个字节内容,写入到文件中写指针指向的位置, 然后将文件写指针向后移动 n 字节 以 ios::out 方式打开文件时,文 件写指针开始指向文件开头 , 以 ios::app 方式打开文件时,文件写 指针开始指向文件尾部 。 /* 二进制文件读写

Problem B: 数量的类模板

有些话、适合烂在心里 提交于 2020-03-27 06:02:18
Description 定义一个类模板Data,用于包装C++中的基本数据类型int和double。它包括: 1. 数据成员value为该对象所包装的值。 2. 无参构造函数(初始化value为0)和带参构造函数。 3. 重载的运算符:>、<、+以及<<。其中"+"返回和,不改变两个操作数的值。 4. 成员函数setValue用于设置value的值。 定义另一个类模板GetResult,它只有3个 静态 成员函数(以下“T"为类型参数): 1. static Data<T> getSum(Data<T> *arr, int num):求存储在arr中的num个Data对象的和,并返回由这个和构成的一个Data对象。 2. static Data<T> getMax(Data<T> *arr, int num):求存储在arr中的num个Data对象的最大值,并返回这个最大值对应的对象。 3. static Data<T> getMin(Data<T> *arr, int num):求存储在arr中的num个Data对象的最小值,并返回这个最小值对应的对象。 Input 输入分多行。 第一行M>0表示有M个测试用例。 只有的M行,每行开始有一个字母i或d,第二个是正整数N>0。如果第一个字母是i,则表示本行包括N个int类型的数据;如果第一个字母为d

C++模板实现数组类

家住魔仙堡 提交于 2020-03-26 09:20:17
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; template<class T1> class Person { public: Person(int len) { this->len = len; this->t = new T1[len]; if (!this->t) { cout << "失败" << endl; exit(1); } for (int i = 0; i < len; i++) { (this->t)[i] = 0; } } Person(int len, T1* t) { this->len = len; this->t = new T1[len]; if (!this->t) { cout << "失败" << endl; exit(1); } strcpy(this->t, t); } T1& operator[](int i); ~Person() { if (this->t != NULL) { delete[] t; t = NULL; } } public: T1* t; int len; }; template<class T1> T1& Person<T1>::operator[](int i) { if (i < 0 || i > this-

7、群体类和群体数据的组织-1.函数模板和类模板

巧了我就是萌 提交于 2020-03-26 09:17:56
基本数据类型是c++编译系统预定义的,而自定义类型的数据是 由多个基本类型或自定义类型 的元素组成的,我们称之为 群体数据 。 对于群体数据,仅有系统预定义的操作是不够的,在很多情况下,还需要设计与某些具体问题相关的特殊操作,并按照面向对象的方法将数据与操作封装起来, 这就是群体类 。 群体可以分为两种: 线性群体和非线性群体 。线性群体中的元素 按位置排列有序 。非线性群体 不用位置顺序来标识元素。 关于群体数据的组织是属于数据结构的范畴,这里只介绍两类常用的算法:排序和查找方法。 排序:又称为分类或整理,是将一个无序序列调整为有序的过程。在排序的过程中需要完成两种基本操作 :一是比较两个数的大小,二是调整元素在序列中的位置 。排序方法:直接插入排序、直接选择排序和起泡排序。 查找:是在一个序列中按照某种方式找出需要的特定数据元素的过程。方法:顺序查找、折半查找。 1、函数模板与类模板 通用代码 需要不受数据类型的影响 , 并且可以自动适应数据类型的变化 。 这种程序设计类型称为参数化程序设计 。 模板 是c++支持参数化程序设计的工具,通过它可以实现参数化多态性 。 所谓参数化多态性 , 就是将程序所处理的对象的类型参数化 ,使得一段程序可以用于处理多种不同类型的对象。 1)函数模板 程序员只需对函数模板编写一次, 然后 基于调用函数时提供的参数类型 , c+

C++类模板解析

旧时模样 提交于 2020-03-12 13:43:45
1.3 类模板 1.3.1 类模板语法 类模板作用: 建立一个通用类,类中的成员 数据类型可以不具体制定,用一个 虚拟的类型 来代表。 语法: template<typename T> 类 解释: template --- 声明创建模板 typename --- 表面其后面的符号是一种数据类型,可以用class代替 T --- 通用的数据类型,名称可以替换,通常为大写字母 示例: #include <string> //类模板 template<class NameType, class AgeType> class Person { public: Person(NameType name, AgeType age) { this->mName = name; this->mAge = age; } void showPerson() { cout << "name: " << this->mName << " age: " << this->mAge << endl; } public: NameType mName; AgeType mAge; }; void test01() { // 指定NameType 为string类型,AgeType 为 int类型 Person<string, int>P1("孙悟空", 999); P1.showPerson(); } int

类模板的定义及其使用

。_饼干妹妹 提交于 2020-03-06 07:23:10
本次引入 类模板 及其基本运算,为之后的一个关于栈的应用做铺垫。 1. 类模板的定义 : 可用类模板来定义类,类模板是对象特性更为一般的抽象。简而言之,一个类模板就是一个抽象的类、类模板的一般定义形式为: template<参数名列表> class 类名{ //类的说明 }; 其中,template是关键字,<参数名列表>中可以有多个参数,多个模板参数之间用逗号分隔。模板参数的形式可以是: class<标识符> 或 类型表达式<标识符> 如,可定义坐标点的类模板如下: template <class T> //带参数T的类模板说明 class Point{ public: Point(T = 0,T = 0); //类的构造函数 Point(Point&); //类的复制构造函数 T Distance(Point&); //返回类型为T的成员函数 private: T x,y; }; 2**.类模板的使用**: 使用上述模板定义对象iobj,并以int替换参数T: Point<int> iobj(3,4); //该对象产生一个int型的点(3,4) 使用该模板再产生一个实例: Point<double>dobj(7.8,8.8); //该对象产生一个double型的坐标点(7.8,8.8) 由此可见,使用类模板可以 声明不同类型的对象 。对于一个可能用到多种数据类型的类来说

链表的实现(类模板)

心不动则不痛 提交于 2020-03-06 07:22:38
上一篇文章的链表实现有点小问题,此处使用类模板再做描述,不过部分代码有所不同。 #include<iostream> #include<cstdlib> #include<cstdio> using namespace std; template<class T> class LinkList; //类的声明 template<class T> class ListNode{ //由于结构体不太便于描述,故此处使用类来描述结点 public: friend class LinkList<T>; //为了使LinkList类能访问该类的私有变量,应将其设为ListNode的友元类 //friend void f(); private: T data; ListNode<T>* next; }; template<class T> class LinkList{ public: LinkList(){head = NULL;} //构造函数,初始化链表 ~LinkList(){}; //析构函数 bool ListEmpty(){return head == NULL;} int ListLength(); //求链表长度 void CreateListF(); //头插法构造链表 void CreateListR(); //尾插法构造链表 void CreateList(); /

C++细节注意点

痴心易碎 提交于 2020-02-25 15:44:44
文章目录 实现和声明的分离 不使用 using namespace std; C++对C语言的增强 重点1 引用 引用的注意事项 引用的本质 指针引用 常量型引用 成员函数调用const修饰对象实例 构造和析构函数实例 拷贝构造函数 拷贝构造函数的调用时机 深拷贝浅拷贝 深拷贝 初始化列表 类对象作为类成员的案例 explicit 关键字 new动态对象创建 完美代替malloc 静态成员变量 静态成员函数 单例模式 成员变量和成员属性分开处理 this指针 this指针的使用 空指针访问成员的函数 常函数和常对象 全局函数做友元函数 整个类做友元类 让成员函数做友元函数 自定义数组实例 运算符重载 二元重载 左移右移的重载的注意点 属性私有后 要使用友元来进行重载 前置后置递增运算符 指针运算符重载(自定义一个智能指针) 赋值运算符重载 [] 运算符的重载 关系运算符重载 函数调用运算符重载 不要重载||和&& 自定义string类 继承 继承方式 继承中的对象模型 继承中的构造和析构顺序 继承中同名成员的处理 继承中静态成员的处理 多继承 菱形继承 解决二义性的方法 虚继承工作原理 多态 静态编联和动态编联 多态原理解析 多态案例1 计算器 抽象类和纯虚基类 虚析构和纯虚析构函数 向上类型转换向下类型转换 游戏多态实例 模板 排序实例 普通函数和函数模板的区别 模板机制内部原理

第六十一课、智能指针类模板

心不动则不痛 提交于 2020-02-25 02:04:18
一、智能指针 1、智能指针的意义 (1)、现代c++开发库中 最重要的类模板之一 (2)、c++中 自动内存管理 的重要手段 (3)、能够很大程度上 避开内存相关的 问题 2、STL中的只能指针 auto_ptr (1)、 生命周期结束时,销毁指向的内存空间 (2)、 不能指向堆数组 (否则发生内存泄漏),只能指向堆对象(变量) (3)、一片堆空间 只属于一个内存指针对象 (防止多次释放) (4)、多个只能指针对象 不能 指向同一片堆空间 #include <iostream> #include <string> #include <memory> using namespace std; class Test { string m_name; public: Test(const char* name) { cout << "Hello, " << name << "." << endl; m_name = name; } void print() { cout << "I'm " << m_name << "." << endl; } ~Test() { cout << "Goodbye, " << m_name << "." << endl; } }; int main() { auto_ptr<Test> pt(new Test("D.T.Software")); cout

C++ 类模板 详解

半腔热情 提交于 2020-02-21 18:49:32
什么是类模板? 类模板和 函数模板 总体上差不多,都是进行虚拟替换! https://blog.csdn.net/cpp_learner/article/details/104390433 为什么要使用类模板? 类模板能够为类的数据成员、成员函数的参数、返回值提供动态参数化的机制,即可以构造不同数据类型的实例。 类模板的定义 类模板由模板说明和类说明构成 模板说明同函数模板,如下: template <类型形式参数表> 类声明 例如: template < typename T > class Father { public : Father ( T name = "无名" ) ; //Father 的成员函数 private : T name ; } ; 单个类模板的使用 其实就是说明了模板,然后在对类的成员类型使用模板的参数替换! 代码示例: # include <iostream> # include <Windows.h> using namespace std ; // 模板说明 template < typename T > class test { public : // 构造函数的参数列表使用虚拟类型 test ( T k = 10 ) { this - > k = k ; } // 成员函数返回值使用虚拟类型 T getK ( ) const { return k