C 实例教学-类的应用
2008-02-23 05:39:09来源:互联网 阅读 ()
类的概念抓住了程式的本质。程式的基本元素是数据。而函数是围绕数据进行处理和操作。抓住了数据这个“纲”,程式中关系复杂的各种函数就变得脉络清楚,能够随着相应的数据组合成类,类的使用使得:
* 程式设计本身更有条理了;
* 程式的可读性更好了;
* 程式设计的过程真正象是机器部件的组装;
* 由于程式的零部件化,使得程式的可重用性变成切实可行的事。
为了学会OOP方法,首先让我们看看C 程式中类及其对象是怎样工作的。
9.1 设计一个栈类
栈(stack)是程式设计过程中经常碰到朝气一种数据结构形式,他对于数据的存放和操作有下面这样的特点:
1) 他只有一个对数据进行存入和取出的端口;
2) 后进者先出,即最后被存入的数据将首先被取出。其形式很象一种存储硬币的小容器,每次只能够从顶端压入一个硬币,而取出也只能够从顶端进行,即后进先出。
这样的数据存储和管理形式在一些程式设计中很有用。例如,编译系统中(这是一类比较复杂的程式),对于函数调用的处理、对于表达式计算的处理,都利用了栈这样的数据结构。
下面是个关于栈的程式:
// program 6_1.h
#include<iostream.h>
const int maxsize=6;
// enum boola{false,true}; /*注:假如在TC中调试,应加上这一句*/
class stack{
float data[maxsize];
int top;
public:
stack(void);
~stack(void);
bool empty(void);
void push(float a);
float pop(void);
};
stack::stack(void)
{
top=0;
cout<<"stack initialized."<<endl;
}
stack::~stack(void)
{
cout<<"stack destoryed."<<endl;
}
bool stack::empty(void)
{
return top==0?true:false;
}
void stack::push(float a)
{
if(top==maxsize)
{
cout<<"Stack is full!"<<endl;
return;
}
data[top]=a;
top ;
}
float stack::pop(void)
{
if(top==0)
{
cout<<"Stack is underflow!"<<endl;
return 0;
}
top--;
return data[top];
}
void main()
{
stack s1,s2;
for(int i=1;i<=maxsize;i )
s1.push(2*i);
cout<<endl;
for(i=1;i<=maxsize;i )
cout<<s1.pop()<<" ";
for(i=1;i<maxsize;i )
s1.push(2.5*i);
for(i=1;i<=maxsize;i )
s2.push(s1.pop());
do
cout<<s2.pop()<<" ";
while(!(s2.empty()));
}
程式运行结果如下:
说明:
1、 第一行定义了一种用户定义的枚举(enum)类型,该类型的全部值在定义式中的{...}内说明,每个值是个标识符,每一个值和一个整数对应,假如不指定的话,就按顺序和0,1...相对应。
程式中定义的枚举类型 名为bool,只有两个值,即false和ture。即falsh=0,true=1。
C 语言中提供的枚举类型,实际上是int类型的一个子集。每个值除了作为一个整数之外,能够由用户给出一个标识符形式的名字。这样比直接用0,1形式的整数更直观,例如还能够定义这样的枚举类型 :
enum answer{no,yes,maybe};
enum listorde{no-order,in-order,in-reverse};
前者指明用0,1,2表示‘否',‘是'‘可能'中不同的回答,后者则用0,1,2表示一个数据序列的三种状态:“无序”、“正序”(从小到大)、“逆序”。在程式运行中,nono-order完全和整数0起相同的作用,yes-和in-order则和整数1等价。
在11,22行指出函数empty()返回类型为bool型,即是说明该函数应返回值false或true,当然返回整数0或1都是对的。在23行其返回语句为return top==0?true:false;其中top==0是个关系表达式,如当前int型变量top的值为0,即top==0为真(true),返回true,如当前top的值不为0,则top==0为假(false),即返回值为false。
2、5~14行为类stack的说明,其中:
class是个关键字,指出所说明的是个类,标识符stack是用户为这个类起的名字。用花括号{ }括起来的是类的成员。
类stack共有7个成员:
6~7行是stack的数据成员,这两个数据成员是stack的私有成员。
私有成员用关键字private:说明,通常这个关键字能够省略,缺省状态下默认为private:成员。私有成员在类外不可访问。
第8行的关键字public:指出在其后所列的成员为公有成员,类的公有成员能够在类外被引用。
9~13行是类stack的五个公有函数成员。
第9行是和类stack同名的函数成员的说明,其定义在类外的15~18行。
函数成员的定义能够在类外也能够在类里面。如把第9行改为:
stack(void) { top = 0;}
那么在类外就不用再说明该函数,这样的在类里面说明的函数默认为内联函数(inline)。在类外说明的函数,其函数名前必须加上"stack::"以表示该函数是类stack的一个成员。
名为stack的函数成员是类stack的一个特别的函数成员,称为类stack的构造函数,他有如下特征:
1) 和类同名;
2) 可有不只一个构造函数(参数表不同);
3) 无返回类型;
4) 主要完成对象的初始化工作;
5) 在说明该类的一个对象时,系统自动调用其构造函数;
6) 类说明中如未说明构造函数,系统配置一个最简单的构造函数。
第10行是另一个特别的函数成员,称作析构函数,其特征为:
1) 名为“~”加上类名。
2) 无返回类型。
3) 能够定义一个或缺省。
4) 在该类的对象退出其说明区域时自动执行。
5) 主要完成该对象撤消前的善后工作。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 用C 库连接Oracle, MS SQL, MySQL等数据库
下一篇: C 习题和解析-类和对象
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash