C++ ADT-基本语言定义下的抽象数据类型

面向对象系统由一组交互的对象构成,每个对象都有自己的属性与行为,这些对象通过相互之间的信息传递实现系统功能。对象所属的类型被称为类,类是对于一组具有相同属性和行为的对象的抽象。本文初探C++的类和对象。

                                                                                                                         ——前言

开一个新的版块C++,菜鸡也是现学的,能学多少看造化了。

一、类的定义:

面向对象程序的主要工作就是捕获现实系统中的行为,并将这些行为和它所涉及的数据紧密连接在一起,这是通过定义抽象数据类型(ADT,abstract data type)实现的。ADT是对内置类型的扩展,由用户自己定义,所以也叫用户定义类型,UDT。

二、基本语言定义的ADT

抽象数据类型:一组数据+对这组数据的一些操作

C++也可以定义ADT,最常见的是结构体+全局函数。结构体来描述数据组,全局函数来处理数据。结构体数据作为参数传递给全局函数。下面来看看由基本语言定义的一个存储字符数据的栈类型。

栈,是一种,后进先出的结构,就像是网球筒一样,你想要取得最底下的球必须先取出后面的球,才能把最底下的球取出来(这和你吃品客薯片是一样的道理)。可见,它的特征是只在一端进行操作,基本操作就是:

A、进栈(push):将数据压入栈顶(把网球放入筒里)

B、出栈(pop):取出栈顶数据,栈内的下一个元素作为最新的栈顶。(取出最上面的一个网球,和室友一起玩耍)

当然,其他常见的操作还有判断满栈、空栈和清栈、etc。

我们接下来看一段字符数据的栈类型。(C++)

//chstack1.h中:
const int max_len = 1000;           //栈的最大容量
const int EMPTY = -1;
const int FULL = max_len - 1;
//结构体把要处理的数据组织到一起
struct chstack
{
	char s[max_len];             //栈的内容保存在字符串s里面
	int tp;                      //栈顶指示器,栈空时为-1
};
void clear(chstack *stk)
{
	stk->tp = EMPTY;             //清空栈
}
void push(chstack *stk,char c)
{
	stk->s[++stk->tp] = c;        //字符c进栈
}
char pop(chstack *stk)
{
	return (stk->s[stk->tp--]);    //出栈
}
char top(chstack *stk)
{
	return (stk->s[stk->tp]);      //返回栈顶元素但是不出栈
}
bool empty(const chstack *stk)
{
	return (stk->tp == EMPTY);
}
bool full(const chstack *stk)
{
	return (stk->tp == FULL);
}
//实现字符串逆序输出,当然,是杀鸡用牛刀
//这下面是fucku.cpp
#include "chstack.h"
#include <iostream>
using namespace std;
int main()
{
	char str[50] = { "Oh yeah com'on let's go do you like what you see" };
	cout << str << endl;
	chstack s;
	clear(&s);
	int i = 0;
	while (str[i] && !full(&s))
		push(&s, str[i++]);
	while (!empty(&s))
		cout << pop(&s);
	cout << endl;
	system("pause");
}

在这段代码中,chstack采用结构体+全局函数实现,虽然很臃肿,不过只是为了演示。

但这种写法,数据与操作之间密切关系不是很明显,需要大量传送地址,不是很直观,并且,大量使用全局函数的情况下,容易引起名字冲突,这可咋整啊???

不急,请看下一篇水文。

猜你喜欢

转载自blog.csdn.net/qq_42229034/article/details/81979686