数据结构(面向对象与模板)
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。

 

相关内容

热门资讯

《荣耀战魂》战斗人物技能及游戏... 第1页:展开《荣耀战魂》好玩吗?相信很多玩家没机会上手,对其各方面体验如何并不了解,今天小编带来“q...
《NBA2K17》过人操作视频... 第1页:展开《NBA2K17》相对前作来说更加真实,而过人方面以往的方法明显不适用,虽然操作简单,但...
《实况足球2017(PES20... 第1页:展开《实况足球2017(PES2017)》中的精彩进球可以让很多玩家热血沸腾,那么下面小编就...
50岁中年必玩十大游戏推荐20... 人到中年,生活被家庭和琐事填满,忙碌之余总想来点轻松的消遣,不用费眼费神,50岁中年必玩十大游戏节奏...
卡丁车游戏有哪些介绍2026 ... 指尖驰聘风为伴,竞速逐乐无牵绊,操作简单不费脑,闲时比拼心欢颜,卡丁车游戏操作简单,节奏轻快,既能体...
武装直升机游戏哪些值得玩202... 去找到那种热血以及自由的感觉,武装直升机游戏主要说的就是一个真实以及热血的操控感,满足大家对于高空战...
十大最耐玩的3a游戏推荐202... 节奏快的时候不打紧,因为大家总可以找到让自己宽松的角落,十大最耐玩的3a游戏不需要凭借很多乱七八糟的...
龙城游戏哪些值得玩2026 质... 闲暇之余寻乐趣,龙城世界藏惊喜,龙城游戏以传奇热血为核心,融合PK竞技,养成探索等元素,凭怀旧感与高...
全网最火的手机小游戏合集 20... 全网最火的手机小游戏。不知道各位玩家有没有发现虽然现在排行榜上还是以大型手游为主,但是越来越多的玩家...
忍者神龟游戏下载合集 2026... 对于无数玩家来说,忍者神龟游戏是刻在童年记忆里的符号,从街机摇杆式操作到移动端指尖划落,这份属于纽约...