对程序设计类课程双语教学的重要性和实施方法的思考

上传人:wm****3 文档编号:42212355 上传时间:2018-06-01 格式:DOC 页数:20 大小:266.50KB
返回 下载 相关 举报
对程序设计类课程双语教学的重要性和实施方法的思考_第1页
第1页 / 共20页
对程序设计类课程双语教学的重要性和实施方法的思考_第2页
第2页 / 共20页
对程序设计类课程双语教学的重要性和实施方法的思考_第3页
第3页 / 共20页
对程序设计类课程双语教学的重要性和实施方法的思考_第4页
第4页 / 共20页
对程序设计类课程双语教学的重要性和实施方法的思考_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《对程序设计类课程双语教学的重要性和实施方法的思考》由会员分享,可在线阅读,更多相关《对程序设计类课程双语教学的重要性和实施方法的思考(20页珍藏版)》请在金锄头文库上搜索。

1、从基本顺序表到基本顺序表类在上一期的“数组和基本顺序结构”一文中我们讲到,优秀的程序员自觉地把函数分为基本操作函数和应用函数,然后把基本操作函数和基本顺序表结构看作一个整体,当作一个类型,用于应用函数即程序的设计和实现,表 1 简要概括了这些内容。 可是 C 语言编译器没有把这两类函数区别开,它们的声明、定义和调用方式都一样。不仅如此,它们对结构成员的访问权限也一样,应用程序可以直接访问结构成员,例如表 1 中的 Purge 函数可以修改为: void Purge(SeqList *L)/删除表中的重复数据 int i,j; for(i=0;iL-size;i+)/直接访问结构成员 size

2、j=i+1; while(jL-size) if(L-datai=L-dataj) /直接访问结构成员 data Erase(L,j); else j+; 而 C+编译器克服了 C 的局限性,实现程序员的设计方法,从概念和语法两个方面把两类函数区分开来。 1.从 C 基本顺序表到 C+基本顺序表类的转换 下面我们分十步把表 1 中简化的 C 基本顺序表结构转化为 C+基本顺序表类。 布尔型函数。C+增加了布尔型,它占用一个字节,仅取两个值:真和假(true 和 false),对应的整型值是 1 和 0。于是,对取真假值的函数,应将其返回值定义为布尔型。例如: bool ListEmpty(co

3、nst SeqList *l);/判空 将宏常量改为 const 常量。例如将 #define MaxSeqSize 100 改为 const int MaxSeqSize=100; 在 C+中一般都用 const 常量或者枚举常量来代替宏常量,这是因为宏代表的是在预处理阶段完成的一种文本替换过程,它忽略了语言的作用域、类型系统和所有其他的语言特性和规则,这使它和语言本身割裂开来。 常量型引用调用。把带有形式数据类型参量的值调用函数改为常量型引用调用1: void InsertRear(SeqList *l, const Type/尾插 函数类型是常量型引用。若函数类型是形式数据类型,则将其改

4、为常量型引用1: const Type/取值 重载。简化求长和判空等函数名: int Size(const SeqList *l);/求长。取元素个数 bool Empty(const SeqList *l);/判空 在 C 语言中,函数名代表函数地址,因此不同的函数必须有不同的函数名,即使参数表不同而功能相同的函数,也要赋予不同的函数名。例如,在基本顺序表、基本顺序队列和基本顺序栈中的求长基本操作,虽然功能一样,但是函数名必须有别: int ListSize(const SeqList *l);/基本顺序表求长 int QSize(const Queue *q);/基本顺序队列求长 int

5、StSize(const Stack *s);/基本顺序栈求长 显然,这给程序设计和阅读带来不必要的麻烦。按照简约的习惯,功能相同的函数,即使参数表不同,也应具有相同的函数名,例如: int Size(const SeqList *l);/基本顺序表求长 int Size(const Queue *q);/基本顺序队列求长 int Size(const Stack *s);/基本顺序栈求长可是函数名相同而参数表不同的函数如何对应不同的地址呢?一种简单的方法是建立一个映射,使函数名和参数表对应一个新的函数名。这个映射是单一的:只要函数名和参数表有一处不同,所对应的新的函数名就不同。我们让这个新的

6、函数名对应函数的地址,这项工作由 C+编译器来完成。它根据参量表的参量个数和类型对函数名进行扩展,形成函数的内部名称,这个内部名称对应函数地址。例如,求长函数经编译器扩展后的内部名称可能是: Size_const_SeqList* Size_const_Queue* Size_const_Stack* 当然,不同的编译器,扩展方法可能不同,但实质相同。 成员函数。首先,将构造函数和基本操作函数参量表中的结构指针 l 改名为 this,例如:void SetList(SeqList *this);/给元素个数 size 赋值 0 int Size(const SeqList *this);/求长

7、 bool Empty(const SeqList *this);/判空 const Type GetData(const SeqList *this,int id); /取值 void InsertRear(SeqList *this, const Type/尾插 void Delete(SeqList *this, int id);/定点删除 错误信息报告函数没有结构指针参量,需要补上(补上的 this 指针在定义中没有用,我们称它为哑元),然后将函数名简化: void Error(const SeqList *this,const char *c);/错误信息报告 接下来,将 this

8、指针隐藏,指向常量指针 this 的 const 修饰符移到参量表括号之后。最后,将构造函数和基本操作函数放入结构体内,成为结构的成员,称为成员函数,后带 const修饰符的函数称为常量型成员函数: const int MaxSeqSize=100; struct SeqList Type dataMaxSeqSize; int size; void SetList(void);/构造函数 int Size (void)const; /常量型成员函数 bool Empty(void)const; void InsertRear(const Type const Type/常量型成员函数 voi

9、d Erase(int id); void Error(const char *c)const; /常量型成员函数 ; 成员函数的调用方式发生变化,设 L 为表结构变量,原来是 ListSize(/L 基本顺序表结构变量 Erase(现在是 L.Size(); L.Erase(1); 设 L 为表结构指针,原来是ListSize(L); /L 基本顺序表结构变量指针 Erase(L,1); 现在是 L-Size(); L-Erase(1); C+编译器对新的调用方式在内部展开的过程与上面生成函数成员的过程正相反。例如: L.Size(); 内部展开过程首先是显示 this 指针参量,然后根据参

10、量表扩展函数名,扩展之后,函数的内部原型可以假设是 int _ListSize(const SeqList*this); 然后调用形式为: _ListSize( 实质上与原来相同,但是意义大不一样:成员函数属于结构的成员,由结构变量负责调用,而且成员函数中隐藏的 this 指针就指向那个调用它的结构变量。 原来一个结构空间的大小是其数据成员空间大小之和,现在结构中包含了函数成员,是否结构空间就变大了?答案是没有。从图 1 演示的成员函数调用的内部过程我们不难理解,新的结构与原来的结构本质上是相同的,只是编译器的工作多了,函数和调用有了内部展开形式。 成员函数定义。成员函数的定义可以在结构体内,

11、也可以在结构体外。在结构体内定义,等于内联函数;在结构体外定义,等于函数类型标识符和函数名之间要加入结构名和域解析运算符“:” ,以区别于一般的实用函数。在函数定义体内,this 指针可以显示,也可以隐藏。 const int MaxSeqSize=100; struct SeqList Type dataMaxSeqSize; int size; void SetList(void); int Size (void)constreturn(size);/ return(this-size); /在结构体内定义 bool Empty(void)const; ; bool SeqList:Emp

12、ty() const/在结构体外定义 return(size=0);/return(this-size=0); 构造函数。现在从声明、定义和调用三个方面把基本操作函数与实用功能函数区分开了,接下来我们区分构造函数和基本操作函数。在基本顺序表中,构造函数的执行过程是: Seqlis L; SetList(/调用构造函数 这两条语句是不能分开的,它们一起完成了基本顺序表的创建。C+把这两条语句合并为一条。具体方法是:把构造函数名和结构名统一,都是 SeqList,使语句 Seqlis L; 蕴涵着调用构造函数。因为构造函数是基本顺序表定义的一部分,所以它的头应该是结构名称,不含返回值类型说明。又因

13、为它的内容需要程序员定义,所以保留了函数体。 struct SeqList SeqList(void);/构造函数声明,名称与结构名称相同,而且取消了函数返回值类型 ; SeqList:SeqList (void)/构造函数外部定义 size=0;/this-size=0; 访问权限。在基本顺序表中,各种函数都可以直接访问结构成员,没有区别。C+在结构中增加了访问权限,一般分私有和公有。私有成员只能由结构成员访问,即对结构成员公开,而结构以外的函数只能访问公有成员。公有部分是任何函数都可以直接访问或使用的,即对外公开、可见。 const int MaxSeqSize=100; struct S

14、eqList private:/私有声明 Type dataMaxSeqSize; int size; void Error(const char *c)const;/私有函数 public:/公有声明 SeqList(void);/构造函数 int Size (void)const; bool Empty(void)const; void InsertRear(const Type const Type void Erase(int id); ; 结构以外的函数“看不见”结构中的私有部分。例如,实用功能函数 Purge 是不能直接访问结构成员 data、size 和Error,只能通过公有成

15、员函数来处理: void Purge(SeqList *L) /删除表中的重复数据 int i,j; for(i=0;iL-Size();i+) j=i+1; while(jL-Size() if(L-GetData(i)=L-GetData(j) L-Erase(j); else 摘要:本文以 VFP 教学为例,通过对循环语句中给出的一道例题,提出了在程序设计语言教学中如何培养学生编程的兴趣和技巧。在教学过程中应因材施教,引导学生在课堂上积极思考,提高分析和解决问题的能力。 关键词本文来自:计算机毕业网 :计算机程序设计;学习能力;兴趣 1引言 目前,国内绝大多数高校的“计算机程序设计语言”这门课程一般是选择一门语言进行教学。按传统的教学模式,把计算机程序设计作为一门语言来进行讲解,注重语言的基本语句、语法和一些细节的分析,按部就班地依照语言教

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号