- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
类属和模板.pdf
第七章 类属和模板
(C)2007首都师范大学信息工程学院
在设计中我们总会发现对于程序的某些部分,从它
们的逻辑功能看,彼此是相同的,所不同的只是处理
对象 (数据)的类型,例如:
int max(int x, int y) { return (x y)? x : y; }
float max(float x, float y) { return (x y)? x : y; }
double max(double x, double y) { return (x y)? x : y; }
若能将处理对象 (数据)的类型作为参数传递给提
供同一逻辑功能的程序正文,可以大幅度地提高代码
重用度。这就是类属 (参数化模板)编程的思想。
(C)2007首都师范大学信息工程学院
类属编程有两种方式:
⑴传统的采用创建类属数据结构的编程方式;
⑵采用C++ 提供的类属工具— — 参数化模板进行编
程的方式。
本章的重点是本章的重点是模板模板编程编程,,但对但对类属类属的了解将有助于的了解将有助于
对模板的理解。
(C)2007首都师范大学信息工程学院
7.1 类属
7.1.1 为什麽要引入类属编程
为什麽要引入类属编程呢?可以通过一个实例来说
明。若有一个整数链表,可以将它定义成一个类,此
类具有将整数插入链表、在链表中查找指定整数、从
链表中删除指定整数等操作,类定义和使用如下:
#include iostream.h
struct node { // 链表结点的数据结构
int val; // 结点值
node* next; // 结点链值
};
(C)2007首都师范大学信息工程学院
class intlist // 整数链表类
{
node * head; // 链表头指针
int size; // 链表中的结点个数
public:
intlist() // 构造函数
{{ headhead == 00;; sizesize == 00;; }}
~intlist(); // 析构函数
bool insert(int); // 向链表中插入一个结点值
bool deletes(int); // 从链表中删除一个结点值
bool contains(int); // 判断链表中是否包含指定结点值
void print(); // 显示输出链表中所有结点值
};
(C)2007首都师范大学信息工程学院
intlist::~intlist()
{
node* temp; // 定义一个结点型指针用于指向被删结点
for (node* p = head;p;) // 循环删除链表中的所有结点
{
temptemp == pp;; //// 另时指针指向当前结点另时指针指向当前结点
p = p-next; // 修改链表中的当前结点指针
delete temp; // 删除当前结点
}
}
(C)2007首都师范大学信息工程学院
bool intlist::insert(int x)
{
node* nodes = new node; // 创建一个新结点
if (nodes) // 判别新结点是否创建成功
{
nodes-val = x; // 将指定值赋予新结点的值域
nodesnodes--nextnext == headhead;; //// 将链表的头指针赋予新结点链域将链表的头指针赋予新结点链域
head = nodes; // 修改链表头指针使之指向新结点
size++;
文档评论(0)