数据结构(面向对象与模板)
admin
2024-05-01 14:44:08
0

目录

面向对象的再理解

面向过程写法

 面向对象写法

泛型机制

函数模板

类模板

类模板的定义

类模板的使用

有关类模板的小结:

const机制


面向对象的再理解

面向对象方法将数据和对数据的基本操作处理函数都封装在一个类中,分别成为一个类的属性成员函数

整个类相当于定义了一个新的数据类型,然后根据具体问题建立该类的对象(即变量),通过对象调用合适的函数来解决实际问题。

实例

将1-20之间的奇数存入内存,之后在这组数中查找用户输入的任意一个整数并报告查找结果。

面向过程写法

void setValue(int b[], int n);
void find(int b[], int n, int x);//查找xint main()
{  int  data[10], a;setValue(data, 10);cout<<"a=";   cin>>a;find(data,10,a);return 0;
}
void setValue(int b[], int n)
{    for (int i=0; i

 面向对象写法

class arr
{  private:int *a;int maxSize, count;public:arr(int size);void append(int x);void find(int x);~arr(){delete []a;};     };
arr::arr(int size)
{a = new int[size];maxSize = size;count = 0;
}void arr::append(int x)
{if (count==maxSize) return;a[count] = x;count++;
}
void arr::find(int x)
{   int i;for (i=0; i>a;obj.find(a);return 0;
}

泛型机制

Ø数据结构研究的是具有一定关系,且类型相同的一组元素。 Ø元素类型不特指某种具体类型,如整型、字符型或者复杂的结构类型。 Ø元素无论何种类型,它们在关系、基本操作处理方法上是一样的。

因此在数据类型上使用泛型机制: 函数模板、类模板

函数模板

函数模板定义

以max函数为例

template 
T max(T x, T y)  { if (x>y) return x; else return y;}

解释:上述代码在定义max函数对应的类模板时,数据类型标明的是T,此处的T未明确指出对应的类型,是因为所写模板可以适用于多种数据类型,当在其他位置调用此函数时,标明变量所对应的数据类型,系统会自动将数据类型传递到该函数,替换T,构成一个明确的函数。

函数模板的使用

int main
{  count<

上述函数中,第一个3,5对应的是int类型,第二个'a','h'对应的是字符串类型,此处系统会根据所给数据根据模板函数自动产生函数定义。

类模板

类模板的定义

template 
class arr
{  private:elemType *a;int maxSize, count;public:arr(int size);//参数前加const,保护参数在函数执行中不得修改void append(const elemType &x);//参数表后加const,保护调用函数的对象的值不得修改void find(const elemType &x)const;~arr(){delete []a;};
};template  
//类模板中成员函数自动为函数模板
arr::arr(int size)
{a = new elemType[size];maxSize = size;count = 0;
}template 
void arr::append(const elemType &x)
{if (count==maxSize) return;a[count] = x;count++;
}
template 
void arr::find(const elemType &x) const
{int i;for (i=0; i

类模板的使用

int main()
{  arr obj1(10); //使得类模板实例化为一个模板类const arr obj2(20);int a;const int b=100;for (int i=0; i<10; i++) obj1.append(2*i+1);cout<<"a=";   cin>>a;cout<<"In obj1: ";     obj1.find(a);cout<<"In obj1: ";     obj1.find(b);cout<<"In obj2: ";     obj2.find(a);return 0;
}

有关类模板的小结:

1、定义类时,要“加帽子”、“加胡须”。里面就可以使用一种泛化类型。

2、对类中每个成员函数实现时,也要戴帽子。里面使用泛化类型。

3、对于类模板,我们在使用时,写的外部函数,一定要注意泛化类型的实例化,比如上述main函数中的arr注意加上int。

 

相关内容

热门资讯

《夜下降生ExeLate》角色... 第1页:展开《夜下降生ExeLate》大家喜欢这款格斗游戏吗?相信很多玩家还没有玩上,我们先来看看夜...
《Inside》图文攻略 全收... 第1页:第一幕展开《Inside》是由开发过《地狱边境》的PlayDead工作室制作,并获得了IGN...
《夜下降生ExeLate》全角... 第1页:第一期-Hyde展开《夜下降生ExeLate》大家是不是还没有玩上呢?不要担心先为大家带来了...
《生化危机6》全武器图鉴及数据... 第1页:Nine-Oh-Nine(909)展开《生化危机6》中的武器多种多样,那么每个武器的数据是什...
《新捉鬼敢死队》画面操作试玩心... 第1页:画面展开《新捉鬼敢死队》是一款类似《孤胆枪手》视角玩法的动作射击游戏,根据同名电影改编,可四...
《新捉鬼敢死队》图文攻略 全章... 第1页:角色技能、鬼魂图鉴展开《新捉鬼敢死队》根据同名电影改编的多人动作冒险游戏,玩家需要4人团结才...
《墓园》图文攻略 战斗冒险玩法... 第1页:游戏介绍与菜单设定展开《墓园》一款非常有意思的动作冒险游戏,大家有没有尝试下呢?今天就为大家...
《饥荒》四季及洞穴基本生存攻略... 第1页:洞穴生存篇(1)展开《饥荒》在四季生存和洞穴求生一直是玩家比较关心的问题,那么怎么才能顺利的...
《模拟人生4》物件导模MOD制... 第1页:展开各位玩家想不想在《模拟人生4》中制作一个属于自己的MOD?下面小编给大家带来的是《模拟人...
《饥荒》海难虎鲨渡渡鸟与黑曜石... 第1页:渡渡鸟属性特点及掉落展开《饥荒》海难大家有没有非常了解虎鲨与渡渡鸟还有黑曜石科技呢?今天就为...