面向对象程序设计实习报告

2024-10-08

面向对象程序设计实习报告(共9篇)

面向对象程序设计实习报告 篇1

《面向对象程序设计》

实习报告

班级:电子商务

学号:xx

姓名xx

指导教师:

实习时间:2011.12.26-2012.1.6

一、实习目的

经过两个周的面向对象程序设计的实习,让我再次复习了SQL和VB的相关知识,因为自己这这学期的课程中对VB和SQL都有学习。虽然我们的上机课是有限的,但是在这次的实习中让我更加的对自己多掌握的知识做了个很详细的补充。由于两个周基本上都是自己在电脑上亲自操作完成任务,所以我就更加熟悉和掌握其具体应用的方法。当然在这个任务完成的工程中会遇到很多的难题,所以就要靠自己努力不懈的看书弄懂,还有问老师和四周的同学,把不懂的地方尽量通过这几种渠道把它弄懂。在整个实习过程中,我清楚并掌握了SQL Server的集成环境、系统的菜单、工具栏、企业管理器、查询分析器的具体使用方法还有掌握了创建数据库、数据表等的方法,了解并知道数据表的操作命令以及T-SQL命令的使用。在编写代码的时候,我大概了解VB基本命令的使用方法;掌握常用函数、表达式的使用方法,掌握程序控制结构的使用和程序设计,掌握变量的作用范围和自定义函数的使用。以及熟悉了VB与数据库管理系统的连接方法等。这些都是要通过自己的实际操作中慢慢的的熟悉和了解的。我觉得这样的实习不仅让我在这两门重要的编程课中加深自己的知识,同时在以后的工作中能够有更大的用途。

这次的实习,在我自己来看,虽然还存在很多的问题,但是总体的效果还是很好的。老师的逐渐提醒和同学们之间的共同商量,都能够让我受益匪浅。还有还渐渐的掌握了一些小的程序的编程,这让我在vb和sql上有更加深刻的掌握,对我的以后工作还是学习上都是百利无一害的。

二、实验内容

在这次的实习中我完成了SQL SERVER的基本操作,如创建学生情况表等三个表以及录入记录;SQL Server 与程序设计语言连接,从中对之前的三个表的录入信息等; 程序设计语言基本算法中的求素数和自然数对、最大公约数和公倍数问题、百钱百鸡问题等;常用统计算法中的成绩统计和字符统计问题;常用排序方法中的选择排序法和二维数组排序问题;以及加密解密、数值转换问题;矩阵的综合运算;学生管理信息系统、集成界面已经程序封面的设计等问题。但是同时由于知识的不全面也没有完成如冒泡排序法、梵塔问题。

1.创建学生情况表107及数据录入

图 1-1 学生情况表107结构设计

图 1-2 学生情况表107的记录信息

2.创建课程情况表107及数据录入

图 2-1 课程情况表107结构设计

图 2-2 课程情况表107的记录信息

3.创建选课情况表107及数据录入

图 3-1 选课情况表107结构设计

图 3-3 选课情况表107的记录信息

实验二

SQL Server 与程序设计语言连接

图2-1 学生情况表综合查询

图2-1学生情况表记录

图2-2学生情况表网格

图2-3学生情况与选课主从

图2-4课程情况与选课主从

图2-5课程情况表网格

图2-6选课情况表记录

图2-7选课情况表网格

实验三

程序设计语言基本算法

1.求“107到500”以内的所有素数及自然数对。

图3-1 素数及自然数对程序运行界面图

2.计算最大公约数和最小公倍数

图3-2 计算最大公约数和最小公倍数的运行结果图

3.百钱百鸡问题

图3-3 百钱百鸡问题的运行结果图

实验四 常用统计算法

1.成绩统计

图4-1成绩统计的运行结果图 2.字符统计

图4-2 字符统计的运行结果图

实验五

常用排序方法

1.选择法排序

图5-1选择法排序的运行结果图 2.二维数组排序

图5-2 二维数组排序的运行结果图

实验六

加密解密与数制转换

1.数据加密与解密

图6-1 简单数据加密解密的运行结果图 2.数制转换

图6-2数制转换的运行结果图

实验七

矩阵的基本运算

图7-1 矩阵操作的运行结果图

实验八

综合应用

1.数据文件管理

图8-1 学生基本信息管理系统

2.设计程序封面

图8-2 程序封面示意图

3.系统集成界面设计

图8-3集成系统界面

三、实习总结

主要收获:经过两个周的面向对象程序设计实习,让我对与VB和SQL的综合运用能力有了很大的提高和长进。因为我们大部分的时间都是实际操作,这样子的话使我们每个同学都能够很好的将书本知识转化为实践能力,在实践中慢慢的发现自己的不足和知识的欠缺。而在这个过程中,我学到了远远比在书本上学到的东西多得多的能力,比如SQL的基本操作和命令的熟练运用,VB的程序代码的编写以及界面的绘制等等,在这次的实习中我都能够慢慢的掌握并且运用在实际的实习中。这不经让我在这两门课程中从不太了解逐渐一步一步熟悉,许多没掌握的知识也有所消化,很多没注意的细节也有所掌握。尤其是在我在不懂的时候通过查阅资料、询问老师和同学商量的过程中也让我更加的对这次的实习感到万分的高兴,这种宝贵的机会更能调动我们的自己动手的能力,更快的提高我们掌握知识的速度。存在问题:虽然说这次的实习我学到了很多的知识和丰富的经验,但是我在实习中是存在许多问题没有解决。比如:

一、在VB方面,对于难一点的程序设计,它的程序代码编写我还是觉得写起来很困难,这样的话对于我的程序的运行上面就会出现很多次的小问题导致不能正常运行,还是没有很好的学习到更加深层次的复杂性的程序设计。

二、在SQL方面,虽然在创建数据库、创建表、插入记录上面我已经很熟练的掌握并且能够很好的运用,但是在连接方面我还是存在很大的问题,只能死记硬背老师给教的步骤,然后慢慢的调试。尤其在于实验二中的学生情况表的综合查询方面,我还是有点不能很好的理解和运用。

三、毕竟实习的时间是很短暂的,在这个短短的两个周内要好好看书,然后再慢慢的在电脑上调试还是需要时间的,所以在于很多的任务上我还是第一次涉及到,比如封面设计的绘制图形、设计集成界面等,都要通过有关的书籍看懂再自己设计的,所以还不能设计出更加好看的图形,只能是涉及绘制那种最简单的图形。

四、对与VB的有些实习任务比如冒泡排序法和梵塔问题,在这次的实习中通过看书和同学商量,我还是对于这两个程序有点手足无措,虽然大致的程序界面能够很好的设置下来,但是还是存在很多的问题,这说明了在VB的复杂性的程序设计方面我还是有一些问题的。实习需要改进的意见:首先我觉得对于我自己来说,最重要的还是多看书,在这次实习中我觉得我真的看的有关这个方面的书籍真的是太少太少了,这让我在实习中会遇到很多无论是细小的问题还是理论上的问题,都会遇到很多的困难,所以利用这个寒假还是要好好的在这个方面得到提高。其次我要在自己不懂的地方自己实在不能解决的要请教老师和赶紧和同学商量,要把详细的问题请问老师,不能大而化之的问。这样才能真正的知道哪里欠缺,哪里真正的掌握。最后,就是常常和四周的同学沟通和商量,这样的效率也比较的高,也能知道更多别的同学所掌握的知识,这样更加的丰富了自己的知识和能力。还有就是,这样的实际操作的实习机会应该多点给我们学生,自己动手做才能更好的学到知识。

总之,在这次的实习中我得到了很多的知识,也获得了丰富的经验,在这次的实习中使我受益匪浅,希望以后能够多多的得到这样的机会来提高自己。

参考资料:

1.《SQL Server应用教程》郑阿奇、刘启芬、顾韵华编写.人民邮电出版社,2008.12月第一版 2.《Visual Basic 程序设计》龚尚福编写.中国矿业大学出版社,2007年8月第一版

3.《Visual Basic6.0程序设计实务入门》陈建成、陈柏宏、黄珮莹、陈泽雄、林清祥编写.中国铁道出版社,2001年4月第一版 4.《基于VB和SQL的数据库编程技术》刘志妩、张焕君、马秀丽编写,清华大学出版社,2008年4月第一版

5.《Visual Basic程序设计教程》周霭如、官士鸿编写,清华大学出版社,2000年3月第一版

面向对象程序设计实习报告 篇2

面向对象程序设计 (Object-Oriented-Programming, OOP) 是一种全新的程序设计思想, 目前已成为程序设计的主流思想, 面向对象程序设计的基本单元是类和对象。对于面向对象中一些基本概念的深刻认识, 对于一个初学者而言格外重要。但是, 最初接触到这些概念又会让那些初学者感到晦涩难懂。本文将大量的引入生活中的例子来阐述面向对象中一些概念, 以便初次接触这些概念的人能轻松把握。

在面向对象程序设计方法出现以前, 程序设计都是面向过程的。面向过程的程序设计重点在与函数的设计, 函数是组成面向对象程序的基本单元。面向过程程序设计的优点是:符合人们的思维方式, 按照由上到下的方式, 从整体把握一个要解决的问题。但是, 当处理一个较为复杂的问题时, 面向过程的程序设计将显得力不从心。因为, 在处理问题的过程中, 我们会遇到很多意想不到的问题, 这些问题在最初我们却又无法涉及到, 以前对问题的理解或许就不再适用。

为了解决这些问题, 出现了面向对象对象的程序设计。面向对象的程序设计是以数据为中心, 类作为表现数据的工具, 是划分程序的基本单位。它采用的是由下至上的解决问题的模式, 从问题的一部分入手, 逐渐构建出整个程序, 比较适用于较为复杂的项目的解决。

这样就给我们提出了一种全新的解决问题的思维模式:将一个大的项目分解为若干小的项目, 逐一突破, 继而完成整个项目。

2、类和对象

类和对象是构成面向对象程序设计的基本单位。

2.1 对象

2.1.1 对象的概念

对象就是一组变量和相关方法的有机结合体, 其中变量表明对象的属性, 方法表明对象所具有的行为。

2.1.2 生活中对象的概念

现实世界是由各种对象组成的, 在生活中, 我们所指的对象就是“东西”, 几乎任何东西都可以看做是对象。将一个东西看做对象, 我们便可以独立的去审查它的性质、行为, 进而研究它和其他对象之间的关系。同样, 我们在程序中引入对象的概念, 就可以把一个程序看做是多个对象相互作用的结果。

下面以电视机为例讲述对象的概念。绝大多数人对于电视机的内部构造及工作原理并不理解, 但是却又能十分熟练的来使用电视机。因为, 电视机的设计本来就是让我们不需要了解其内部构造就能够使用。电视机对用户来说, 可以视为一个“黑匣子”, 此时, 电视机对我们来说就是一个对象。当用户通过遥控器对电视进行操作的时候, 其内部需要经过一系列复杂的过程, 但是, 这些复杂过程对用户都是屏蔽的, 作为用户只需要知道按下按键将会转换到另一个频道即可。

由此, 我们可以看到对象这个概念的魅力所在, 使用对象的人无需了解其内部构造, 只需要简单了解对象的表面 (接口) 便能应用。因此, 我们不需要成为汽车工程师也能开车, 不需要成为电脑工程师也能使用电脑。这是面向对象程序设计的第一个特点:封装。

电视机的发展经历了从黑白到彩色再到今天的数字电视, 不断的推陈出新都是在最初电视机的基础上发展而来。这便是面向对象程序设计的第二个特点:继承, 即在原有的基础上加以修改创新。

早先设计的录像机, 在今天仍然可以用于新技术的电视机上, 原因在于, 电视机的音频、视频的输入/输出接口没有变化, 这就是“接口”的稳定性。接口的稳定保证了若干对象在各自发展的同时, 还能够进行交互。

2.2 类

2.2.1 类的概念

类, 是具有相同操作功能和相同数据格式的对象的集合和抽象描述。

2.2.2 生活中类的概念

分类在日常生活中无处不在。如下图所示:

诸如上述分类在生活中比比皆是, 不再赘述。

2.3 类和对象的关系

一个类的定义就是对一类对象进行的描述, 是构成对象的模板。类是抽象的, 对象是具体的。如我们用模子来制作月饼, 于是一个月饼加工厂生产出的月饼的外形都一样, 只是各个月饼的馅料各不相同。这时, 我们可以说模子就是一个类, 而样子相同的各个月饼就是由这个类创建的对象。另外, 我们通过一张图纸可以制造出好多辆汽车, 那么这张图纸便是类, 一辆辆的汽车就是由这个图纸类创建出来的若干对象。在程序设计中我们涉及的是由类创建出来的一个个真实的对象。

3、接口

由于封装这个对象的重要特性的存在, 外界将无权访问对象内部的一些信息和功能。此时的对象被视为一个“黑盒子”, 让使用对象的人不用 (也不能够) 了解对象内部的构造及工作情况。这时候, 类的设计者便可以设计一个清晰的接口, 从而达到对对象的操作。可见, 接口的存在可以让用户在不了解对象内部构造的情况下, 轻松的对该对象进行操作。

接口是一种非常有效的工具, 使得程序员能够将对象的定义和实现完全分离, 从而实现了在不破坏现有应用程序的情况下, 使对象得以发展。

4、多态

类中具有相似功能的不同方法可以用同一个方法名进行定义, 从而使用相同的方式对这些具有不同功能的方法进行调用, 这种现象称为多态。

多态在生活中的例子也不难找到。下面引入智能洗衣机的例子来阐述多态。现有一台智能型的洗衣机, 用户只需将脏衣服放进洗衣机后按下【开始】键即可。接下来的任务全部由洗衣机自动完成。这时候, 洗衣机会按照衣物的质地和脏的程度来决定洗的方式和次数。

当用户放进一条比较脏的牛仔裤时, 洗衣机会强洗15分钟, 漂洗5分钟;

当用户放进一件不是太脏的丝绸衣物的时候, 洗衣机会轻柔洗涤5分钟, 漂洗1分钟。

上述这样根据衣物的质地和脏的程度来决定洗涤方式的洗衣机表现出来的便是多态这个特性。不同的洗涤方式是由衣物 (程序中对应的参数) 所决定的。

多态的有两种实现机制:方法重载与方法重写。

方法重载的特点:在一个类中包含多个名字相同的方法, 但各个方法的参数列表是不同的。这个不同体现在参数的个数、参数的数据类型等不同。那么, 这些参数列表的不同之处就决定了最终将会调用那个方法。如同, 上述智能洗衣机的例子, 各个不同的参数即是放进洗衣机中的不同衣物, 它们的不同决定了洗衣机表现出的不同状态。

方法重写是发生在子类与父类之间的, 子类中有和父类中相同的方法名, 但是方法所完成的任务不同。这就和我们生物中所说的遗传非常相似。孩子继承了家长的相貌, 但是又和家长的长相不完全一样, 在家长相貌的基础上又有不同之处, 这个遗传的现象形象的解释了面向对象中方法的重写。

5、结束语

面向对象程序设计中的基本概念, 对于初次接触的人而言非常重要, 对概念的深刻理解和较好的把握将为今后的程序开发打下坚实的基础。本文通过引入了日常生活中较多通俗易懂的例子, 来诠释了面向对象程序设计中的一些基本的却又晦涩的概念, 希望能够给那些对这些概念把握不准确或者理解欠缺的人扫清障碍。

摘要:面向对象程序设计中的概念的理解往往对于初学者而言晦涩难懂, 本文主要引入一些日常生活中的常见例子深入浅出的介绍面向对象中的类、对象、接口、多态等基本概念, 解决初学者对面向对象概念的匮乏或理解欠缺。

关键词:面向对象,类,对象,接口,多态

参考文献

[1]杨学全.C#技术基础[M].北京:高等教育出版社.2008.1

浅谈面向对象程序设计方法 篇3

关键词:面向对象程序设计 结构化程序设计

一、面向对象设计方法

软件设计有两种主流设计方法:以结构化程序设计为基础的结构化软件设计和由面向对象设计方法导出的面向对象的软件设计, 20世纪70年代末到80年代初的结构化设计方法即传统设计方法,以区别于后来兴起的面向对象的设计方法。在软件设计周期中,面向对象设计方法是一种全新的设计和构造软件的方法,它使计算机解决问题的方式更符合人类的解决问题的思维方式,更能直接的描述客观世界,同时也可以增加的代碼的可重用性,是目前和未来软件开发的方向[1]。

面向对象设计在整个软件设计中占据着非常重要的部分,面向对象设计也是将分析阶段所建立的分析模型转变为软件设计模型,但是面向对象分析和面向对象设计之间没有明显的界限,面向对象的方法是基于抽象、信息隐藏、功能独立和模块化等重要软件设计概念基础上的,现阶段的软件设计基本上都运用了面向对象的设计方法[2]。面向对象的开发支持鼓励软件实践中的信息隐藏,数据抽象和封装,可以对单独对一个对象内部进行隔离修改,那么就使得运用面向对象开发的软件更容易修改、扩充和维护[1]。

对象和类是面向对象程序设计的基石,其基本的机制便是方法和消息。消息是要求某个对象执行类中某个操作的规格说明;方法就是对象执行的操作。面向对象程序设计三个重要特征:封装性,继承性和多态性。

(一)对象(Object)和类(Clasess)

对象即指现实生活中无所不在、各种各样的实体,它可以使具体的事物,也可以是抽象的实体[2]。从对象的构成和内容来看,设计程序时使用对象有以下优点:对象是对物体的直接抽象,这种抽象简化了实际物体的模型,同时以一种可以操作的形式将实体表达出来。进行了数据的封装后,掩蔽了实现的复杂性,对于用户使用起来就更加方便。

在现实生活中,具有相似性质,执行相同操作的对象,称为同一类对象,即类是同一种对象的集合与抽象[2]。例如,在Visual Basic中窗体都是Form类的实体,一个单独的窗体也是一个类。

(二)数据封装(Data Encapsulation)

数据封装是类的一个重要特性。数据封装是把数据和相关的操作设在一个包中,那么程序不能直接访问对象中的变量,只有通过对象的方法才能作用于数据。

(三)继承(Inheritance)

我们首先在对象的基础上创建对象,新的对象就会继承原先对象的所有属性和特点,同时根据实际情况也可以选择和修改父对象的属性和功能,这就叫做继承。利用这点,可以将旧的程序扩充为当前所需要的,也可以从已知的类中派生出新的类来。

(四)多态性(Polymorphism)

多态性就是多种表现形式,不同事物具有不同表现形式的能力,具体来说,可以用“一个对外接口,多个内在实现方法”表示。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。

二、结构化程序设计与面向对象程序设计

结构化程序设计是由算法和数据结构组成,算法指处理数据的特定的方法。结构化程序设计首要想法是如何处理数据,然后再选择最为方便处理的数据结构,那么重点主要集中在数据上了。结构化程序设计的基本思想是:系统按功能要求分解为若干个子模块,子模块再根据需求进一步分解为子模块,不断的进行分解,从上往下进行分解,这样的形式是自顶向下的“瀑布式”设计,仅运用了顺序、分支和循环三种结构设计编码。

面向对象程序设计中,用户需要做的事向对象传送消息。编程人员在设计过程中要做的就是向对象处理适当的消息以及它的内部数据,这样就最大限度了提高了代码的可重用性,缩短了调试时间。面向对象程序设计与结构化程序设计是相反的,面向对象的程序设计是从下往上的“喷泉式”的设计,对象是数据处理方法紧密结合的整体。

三、Windows及应用程序与面对对象的程序设计

Windows中的图形用户接口包括窗口,下拉式菜单,对话框等各种控件,这就使得Windows应用程序非常容易使用。我们用结构化的程序设计方法开发Windows应用程序非常困难,即使要在屏幕上生成一个简单的窗口或是一个简单的下拉式菜单也要编写几十条甚至几百条复杂的代码,写这些代码的前提必须是我们对Windows具有非常深入的了解。那么在这种情况下,一种开发时间短、质量高、复用性高等比结构化程序设计方法优良的设计方法。由于Windows的进城的核心也是对消息的处理,因此Windows程序编程是以消息为核心。消息也是面向对象程序设计的基本机制,程序的进程的核心也是对消息的处理,因此面向对象程序设计比结构化程序设计更适合于开发Windows应用程序。利用面向对象程序设计的封装性可以把Windows应用程序的所具有的行为进行封装,形成一个类层次库,这样就为Windows应用程序提供一个一致、直观和简单的与Windows的接口。面向对象程序设计具有继承性这一特性,Windows的应用程序可简单、方便的继承和选择性的使用Windows特性而不必重写这些代码,同时,编程人员也可以借用其他应用程序的功能代码,或是稍作修改,也不必考虑Windows底层的细节。那么这样看来,类层次库就大大的降低了Windows程序设计的复杂性,编程人员也不必一条一条代码的编写,显著的减少了创建Windows应用程序界面所需的源代码量,因此面向对象的程序设计在开发应用程序方面显示出巨大的优越性。

四、结语

面向对象的程序设计方法是当前软件设计的一个主要潮流,采用这种方法开发出的软件具有极大的稳定性、可维护性和可重用性,面向对象程序设计方法运用于软件设计中极大的提高的功能代码的复用性,大大的提高了工作效率。

参考文献:

[1]李双双,李探.面对对象的设计方法[J].计算机光盘软件与应用,2010年第5期

[2]史济民,顾春华,李昌武,苑荣.软件工程——原理、方法与应用(第二版)[M].北京:高等教育出版社,1990

《面向对象程序设计》教学大纲 篇4

课程名称:面向对象程序设计 英文名称:Object Oriented Programming)学分:2 总学时:36 实验(上机)学时: 8 开课专业:电子商务专业

一、本课程的性质、目的和培养目标

面向对象程序设计是电子商务专业的限定选修课程。面向对象程序设计是当今最为流行的程序设计方法,本课程以C++语言为核心,全面概述面向对象程序设计的基本概念和基本技术。主要内容包括:理解和掌握面向对象程序设计的基本思想和技术,掌握C++中的引用和函数重载、类与对象、静态成员与友元、运算符重载、继承与派生类、多态与虚函数等重要概念和技术。通过教学要求学生基本掌握面向对象的程序设计方法,认识C++是如何支持面向对象程序设计的,培养、训练学生运用面向对象技术进行程序设计的能力。

二、预修课程

计算机语言与程序设计

三、课程内容及学时分配

第一章 从C语言到C++语言

1.C++语言出现的历史背景(OOP思想概述)2.C++中的注释、常量和输入输出 3.C++中的变量定义与作用域 4.C++中的函数 5.C++中的指针与引用

本章学时数:4,本章习题数:4 第二章 类与对象 1.类 2.对象

3.构造函数和析构函数 4.对象及其应用 5.对象的生存期 6.再论程序结构 7.面向对象程序设计

本章学时数:6,本章习题数:6 第三章 静态成员与友元 1.拷贝构造函数 2.静态数据成员 3.静态成员函数 4.友元函数

本章学时数:6,本章习题数:6 第四章 运算符重载 1.运算符重载的概念 2.运算符重载举例

本章学时数:4,本章习题数:4 第五章 继承与多态 1.继承的概念 2.单继承 3.多态与虚函数

4.类的分解(类的层次设计)5.抽象类与纯虚函数

本章学时数:6,本章习题数:6 第六章 I/O流库简介 1.C++流库的结构 2.输入与输出 3.格式控制 4.文件

本章学时数:2,本章习题数:2

四、实验(上机)内容和建议学时分配 实验1(4学时)

要求:定义类,该类至少应包括静态数据成员和静态成员函数,要求通过本实验掌握定义类的基本方法。实验2(4学时)

要求:通过本实验掌握函数重载、友元函数、继承、虚函数等的基本使用方法。

五、教材和参考书目

1.《C++语言基础教程》,吕凤翥编著,清华大学出版社,1999 2.《C++程序设计教程》,钱

能主编,清华大学出版社,1999 3.《The C++ Programming Language》(Third Edition),Bjarne Stroustrup,Addison-Wesley,1997

六、课外学习要求

要求课前预习下一次课的讲课内容,课后复习本次课的讲课内容并通过相应的作业加以消化。

七、考核方式

面向对象程序设计教学浅析的论文 篇5

一、培养学习兴趣

为了使初学者能尽快地掌握计算机知识,进入计算机的应用领域,在课程讲授过程中,要特别注意培养学生的学习兴趣。初接触计算机时,很多学生感到新奇、好玩,这不能说是兴趣,只是一种好奇。随着课程的不断深入,大量的感念、规则、定义、要求和机械的格式出现,很容易使部分学生产生枯燥乏味的感觉。为了把学生的好奇转化为学习兴趣,授课时作者从具体问题入手,让学生先从感性上认识新知识,继而再讲授理论要点。

在首次课上,给学生找一些《高等数学》、《线性代数》等已学课程的问题,用算法语言来求解,使学生体会程序设计的用途和一种全新的解决问题的方法。在课程的进行中,引导学生学一种算法,就尝试在同行课程中应用。作者还经常介绍一些趣味性算例,如:“迷宫问题”等[1],来培养学生的学习兴趣,让大家积极主动地获取知识,打好程序设计基础。整个教学过程中应该把解题思路、方法和步骤当作授课的重点,从而让学生明白如何分析并解决实际问题,逐渐培养学生进行程序设计的正确思维模式。

二、循序渐进讲解

绝大部分学生是第一次接触面向对象程序设计的概念,通俗、易懂的教学原则同样适合于这门课的教学。在课程讲授过程中,作者没有把重点放在语法规则的叙述上,而是放在算法和程序设计方法上,通常由几个例题引出一种语法规则,通过一些求解具体问题的程序来分析算法,介绍程序设计的基本方法和技巧,既注重教材的系统性、科学性,又注重易读性和启发性。从最简单的问题入手,一开始就介绍程序,要求学生编写程序,通过反复编写、运行程序来掌握语言规则和程序设计方法。同一个语法规则、同一种算法,在选择例题时也是由简到难,逐步呈现给学生。在学习上不要求学生死记语法规则,而是要求学生能把各个孤立的语句组织成一个有机的程序。注意培养学生良好的编程风格,让学生在编制程序过程中不断总结、巩固,达到学会方法、记住语法规则,提高设计技巧的目的。

三、改进教学方法

作者要求学生事先预习,实际上就是要求他们课前自学,讲课时以学生预习过为起点,只讲难点、重点,这样既给了学生思维分析的余地,又节省课时。这就要求必须精选教学内容,注意详略安排。如在讲到“类与对象”,“继承与派生”[2]这些关键性章节时就讲的特别精,使学生能够熟练掌握、理解透彻,而讲到“输入输出流”时,让学生做到一般了解即可。课堂上找一些程序设计较好、解题思路清晰的例题让学生自己读,找出精妙之处和不理解之处,对普遍性的问题共同讲解,个别问题课后解答。

作者特意地设置一些不同深浅的笔误和口误,马上让学生肯定对与错,以考查学生注意力集中的程度,提高他们的敏锐性和判别力。对有些问题,给出一种程序设计方法后,让学生讨论,还有没有其它的程序设计方法和思路,让他们发表意见,提出自己的解题思路和编程方法,给学生交流不同思路和观点的机会。这就要求老师既能引导又能放开,既有事先的精心备课,又有课堂上的`因势利导,同时也可以从学生讨论中提出的问题来丰富教材内容,使得教与学相得益彰,共同进步。

四、习题与上机实践

做习题是复习所学内同的过程,也是深入学习的过程。作者每次课后给学生布置一些有代表性的习题,以巩固课堂上所学的内容。也通过学生的作业情况来了解学生对课程内容的掌握程度。对作业中比较普遍出现的错误,在下次课上当堂讲解,使得学生能对学过的东西理解透、掌握牢。作业中新颖的程序设计方法和思路,也当堂宣讲或作业批注,以鼓励创新型的学习方法。

每次实际上机操作前,都根据实验教学计划,有系统地布置上机实习作业,让学生明确上机任务,编写好上机调试的程序,使学生在每次上机实践中都有收获。作者让学生按照自己的姓名、学号命名自己的程序文件,调试成功后存入磁盘,并撰写实验报告,课程结束后结合学生的程序和实验报告来评定实验成绩。课程结束前作者坚持进行总结,把所学的内容作一个概要分析,前后联系起来,使学生对所学课程内容能够融汇贯通。

参考文献

1.刘璟,周玉龙.高级语言C++程序设计.第二版[M].北京:高等教育出版社,

面向对象程序设计实习报告 篇6

<书中例题>

第1章 Java 语言综述

例1-1 一个加法器 //Add.java public class Add { public static void main(String args[]){

int a,b,c;

a=5;

b=7;

c=a+b;

System.out.println(a+“+”+b+“=”+c);} }

例1-2 能接受命令行参数的应用程序 //WhoSayWhat.java class WhoSayWhat { public static void main(String args[]){

if(args.length<2)

{

System.out.println(“请向应用程序传递两个参数:”);

System.exit(0);//

}

String s1=args[0];

String s2=args[1];

System.out.println(s1+“ Say: ”+s2);} }

例1-3小应用程序举例 //Test.java import java.applet.Applet;import java.awt.Graphics;//Graphics public class Test extends Applet {

public void paint(Graphics g){

面向对象程序设计实践教学研究 篇7

面向对象程序设计是一门实践性非常强的计算机相关专业的重要基础课程。提高学生的实际动手编程能力一直是该课程教师孜孜以求的目标。目前, 面向对象程序设计课程教学研究多侧重于教学内容、教学模式、教学体系方面的研究[1,2,3,4,5,6]。对于实践教学环节的研究并不多见[7,8]。为提高学生采用面向对象程序设计语言 (以C++语言为例) 进行程序设计的实践操作能力, 该文提出项目驱动式实践教学方法来指导实践教学, 通过模拟项目运行管理方式, 让学生在实践过程中对程序设计的语法层面、方法学层面、工具层面和算法层面有比较全面的了解和掌握, 提高学生的程序设计实践能力。

2 面向对象程序设计实践教学

面向对象程序设计是计算机相关专业的一门重要的编程基础课程, 其目的就是培养学生使用面向对象技术方法和面向对象编程语言进行软件开发的能力。实践教学环节是让学生有实际动手编程的机会。目前, 在面向对象程序设计实践环节还存在一些不足。一是面向对象思想和方法学在上机实习中体现不够。学生上机实习的实验目标不明确, 往往只是把实验教材上的习题输入计算机试一下, 没有真正理解程序设计的核心与精髓在于设计。对于教学过程中提到的面向对象程序设计的优越性实践验证不够, 不知道如何采用面向对象分析、设计方法解答实习作业和实际问题。二是上机实习大部分停留在示范操作层面。实验前教师集中讲授实验目的、原理与步骤, 然后操作示范, 学生只能在限定时间范围能跟随操作, 甚至用手机录屏, 不需要主动思维和创新, 这也限制了学生的创造性和主动性。为此, 为强化实践教学, 我们将面向对象程序设计课程的实践教学环节分为两个部分:实验教学和综合实习。

实验教学主要解决学生对面向对象程序设计语言 (C++语言) 和面向对象技术基础的练习与理解, 并初步掌握可视化的开发环境与和工具的使用。这部分主要解决的是程序设计的语法层面和工具层面的实践问题。实验教学的主要内容包括:1) 面向对象程序设计IDE (如Visual C++、Code::Blocks、Qt Creator等) 的初步掌握与使用;2) 面向对象程序设计语言 (C++) 编程基础;3) 类和对象;4) 继承与派生;5) 多态性。

综合实习主要是让学生练习综合运用面向对象程序设计知识, 让其熟悉和掌握使用面向对象方法、面向对象程序设计语言 (C++语言) 和开发工具 (Visual C++IDE) 来开发具有一定实用性的软件项目的方法和过程。与实验教学相比, 综合实习主要解决的是面向对象程序设计的方法学层面和算法层面的问题。综合实习的主要内容包括:1) 面向对象可视化程序设计的UI库 (如Visual C++的MFC、Code::Blocks下的wx Widget、Qt Creator的Qt) 的了解与使用;2) 面向对象技术与方法的综合使用;3) 软件项目开发过程。

3 项目驱动式的实践教学

面向对象程序设计的实践教学的目标就是提高学生实际动手设计、编程能力。项目教学方法被广泛应用于面向对象课堂教学中[9,10,11], 但在实践教学中应用较少。项目驱动式的实践教学就是整个实践过程围绕一个项目进行, 将面向对象的类与对象、继承与派生、多态性等基础内容融合到一个大型的项目任务中, 采取“模拟项目”方式进行教学。该方法以学生为项目合同乙方, 也作为主体成立项目组, 选举项目经理, 承接项目合同甲方—指导老师的项目任务, 通过一个模拟的软件项目开发过程的培训, 引导学生总结面向对象程序设计的基础知识, 提高专业技能, 锻炼团队协作能力, 掌握初步的软件工程项目研究与开发方法, 体验相关软件企业的实际工作过程。

项目驱动式的实践教学具有以下特点:1) 任务的实战性:以真实的软件公司实际软件项目为蓝本, 基于实际数据和需求, 模拟软件项目或软件产品研发的各个过程, 通过实战性的训练, 提升学生对于面向对象程序设计的四个不同层次 (语法、工具、方法与算法) 的深入理解。对于学生以后就业或从事相关软件研发大有裨益;2) 学生的自主性:学生成立的项目组具有高度的独立自主性, 指导老师作为旁观者, 主要扮演项目合同的甲方代表, 提供数据支持、专业技术顾问、质量监管等角色, 不直接干涉项目组日常运行;3) 考核的全面性:学生的考核成绩由考勤、项目经理评分、实习报告评分、平时进展汇报评分等构成。这里项目经理评分对于学生个体而言权重最大, 因此项目经理人选必须具有很强的组织能力、较好的基础知识、较强的沟通能力, 在实践过程中, 项目经理由各组学生自由选举产生, 项目经理的成绩则由指导老师根据整个项目组的情况进行评分;4) 过程的完整性:在软件项目开发过程中, 学生必须自觉查找资料, 攻克技术难关, 加强团队协作, 学习软件设计与开发方法, 通过项目实战锻炼了学生在软件分析、设计、开发、测试及管理等过程环节中的专业技能, 同时团队合作也训练了学生协同工作能力和合作意识。

在实际的实践教学过程中, 项目组的划分一般以10-15人为一组。项目组内部的小组由项目组自行划分。以项目组为单位对指导老师给出的软件开发任务进行需求分析、概要设计、详细设计、编码实现和系统集成与测试。项目驱动式实践教学是以学生为主体, 而他们知识基础、专业技能、团队协作等各方面能力都有待提高, 并且学生的主动性、积极性、合作性对于教学的成败起到很大的作用。因此, 作为指导老师需要高超的组织能力, 需要密切关注学生的进展情况, 做到每个阶段都要有预案, 实习进度要严格控制, 多用启发和案例的方式引导学生更好地进行软件项目开发, 使其体会面向对象分析 (OOA) 、面向对象设计 (OOD) 、面向对象实现 (OOI) 和面向对象测试 (OOT) 等面向对象技术与方法的优越性。从而保证更好地兼顾面向对象程序设计的语法、方法学、工具以及算法四个层面的实践教学内容。

4 项目案例与过程管理

项目驱动的面向对象程序设计实践教学的关键是项目的选择和以项目为核心的教学过程管理。对于项目的选择, 需要遵循易学、有趣、有用的原则。所谓的易学, 就是项目的选择虽然来源于实际项目, 但项目的起点应该较低, 容易入手学习。对于需要较多专业背景知识的大型的实际项目, 需要对其进行抽象简化, 或选取其局部作为实习用的项目案例。所谓的有趣, 就是项目的选择需要让学生感兴趣, 最好是和其学习、生活具有一定相关度的项目案例。所谓的有用, 则是这个项目做出来后要有一定的实用性。遵循这三个原则选取出来的项目案例有利于激化学生的求知欲, 在实践教学过程中能起到事半功倍的效果。

此外, 项目案例的选择还需要注意以下几个方面的问题:1) 项目涉及到的知识点应该覆盖面向对象程序设计的四个层面的内容, 即要涉及面向对象程序设计的语法层面的类与对象、继承与派生、多态性等基础知识, 也要涉及面向对象程序设计的方法学、算法方面的高层知识, 还要结合具体的开发工具选取适合的项目案例。例如, 如果采用的开发工具是Visual C++, 项目开发是基于MFC的, 那麽项目的界面设计部分应该涉及到MFC的文档/视图结构、用户交互—菜单、工具栏、状态栏、对话框、各种常用控件以及各种鼠标、键盘消息响应等内容。2) 项目案例中的功能应该都是在实际项目中实现过或者验证过的, 并且可以看到实际演示效果。这样学生容易弄懂需求, 自己编程实现的目标直接可见, 更容易激发学生的编程兴趣与欲望。

项目驱动式的实践教学过程中, 项目过程的可控管理非常重要。既要尊重学生项目组的独立自治性, 同时也要防止其自治能力不够而导致的无所事事或无所适从的局面出现, 需要引导学生项目组制定明确的分阶段目标和计划, 以及明确的项目任务分工, 要明确到每个学生个人头上。由于项目组内学生个人能力有差异, 在避免出现滥竽充数的项目组员的同时, 也要允许、鼓励相互帮助完成任务, 实现团结协作和团队学习的教学效果。

5 结束语

面向对象程序设计是计算机相关专业的基础必修课程, 在其专业体系中具有重要地位。该文结合本校面向对象程序设计课程多年实践教学经验, 从程序设计的语法、方法学、工具与算法四个层次讨论了如何使用项目驱动式的实践教学方法。通过易学、有趣、有用的实践教学项目案例的选择与项目过程的可控管理, 项目驱动式的实践教学方法能充分发挥学生主观能动性, 强化学生程序设计的全局观, 增强学生的团队协作意识, 为今后计算机相关专业方向就业奠定良好基础。

摘要:面向对象程序设计是一门实践性很强的计算机相关专业的基础课程, 实践教学环节在其教学体系中具有十分重要的地位。针对该课程实践教学过程中学生主动性不够、程序设计环节缺失的问题, 结合该课程的实践教学经验, 提出项目驱动式的实践教学方法, 有效提升实践教学过程中学生的自治性、任务的实战性、考核的全面性和过程的完整性。

关键词:面向对象程序设计,计算机相关专业,实践教学,教学方法,教学改革,项目驱动

参考文献

[1]陈优良, 徐昌荣, 陈淑婷.GIS专业面向对象程序设计教学改革探讨[J].地理空间信息, 2010, 8 (1) :151-154.

[2]吴跃, 陈峥.面向对象程序设计教改探索[J].计算机教育, 2010 (8) :60-63.

[3]柳宏川, 宋伟.以“类”为中心进行C++程序设计的教学[J].福建电脑, 2011 (1) :198-202.

[4]黄璐, 于红, 李向军, 等.C语言程序设计课程教材建设研究[J].吉林省教育学院学报, 2013, 29 (3) :92-93.

[5]张麟华, 孔令德, 杨慧炯.面向图形图像处理的C++课程案例设计[J].计算机教育, 2013 (4) :88-91.

[6]胡明晓, 刘海霞, 励龙昌.程序设计类课程的层次化教学模式研究与实践[J].计算机时代, 2013 (3) :58-61.

[7]彭召意, 朱艳辉, 周玉.C++面向对象程序设计课程的实践教学研究[J].计算机教育, 2010 (5) :151-154.

[8]孟繁军, 刘东升, 张丽萍, 等.程序设计基础教学策略的实践研究[J].内蒙古师范大学学报 (教育科学版) , 2013, 26 (3) :126-129.

[9]张丽, 夏斌.项目教学法在面向对象程序设计课程教学中的应用[J].计算机教育, 2010 (10) :92-94.

[10]王昕《.面向对象程序设计课程》项目教学法的探索[J].电脑知识与技术, 2011 (15) :3627+3631.

面向对象程序设计实习报告 篇8

【关键词】面向对象 程序设计 发展史 UML

1 面向对象特征概述

面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对象是由数据和操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。面向对象程序设计具有抽象性、封装性、继承性和多态性等特征。

抽象:指从事物中舍弃个别的、非本质的特征,而抽取共同的、本质特征的思维方式。

封装:将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。

继承:让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。

多态:指一般类和特殊类可以有相同格式的属性或操作,但这些属性或操作具有不同的含义,即具有不同的数据类型或表现出不同的行为。

2 面向对象设计方法发展历史

在这里把面向对象方法的发展分为三个阶段:雏形阶段、完善阶段和繁荣阶段。

(一)雏形阶段

1967年挪威计算中心的Kisten Nygaard和Ole Johan Dahl开发了Simula67语言,首先引入了类的概念和继承机制,它是面向对象的先驱。1972年Palo Alno研究中心(PARC)发布了Smalltalk-72,其中正式使用了“面向对象”这个术语。Smalltakl的问世标志着面向对象程序设计方法的正式形成。

可以说出现了面向对象语言之后,面向对象思想才得到了迅速的发展。过去的几十年中,程序设计语言对抽象机制的支持程度不断提高:从机器语言到汇编语言,到高级语言,直到面向对象语言。汇编语言出现后,程序员就避免了直接使用0-1,而是利用符号来表示机器指令,从而更方便地编写程序;当程序规模继续增长的时候,出现了Fortran、C、Pascal等高级语言,这些高级语言使得编写复杂的程序变得容易,程序员们可以更好地对付日益增加的复杂性。

(二)完善阶段

PARC先后发布了Smalltalk-72、76和78等版本,直至1981年推出该语言完善的版本Smalltalk-80。Smalltalk-80的问世被认为是面向对象语言发展史上最重要的里程碑。迄今绝大部分面向对象的基本概念及其支持机制在Smalltalk-80中都已具备。它是第一个完善的、能够实际应用的面向对象语言。但是随后的Smalltalk-80的应用尚不够广泛,其原因是:

追求纯OO的宗旨使得许多软件开发人员感到不便。

一种新的软件开发方法被广泛地接受需要一定的时间。

针对该语言的商品化软件开发工作到1987年才开始进行。

(三)繁荣阶段

从20世纪80年代中期到90年代,是面向對象语言走向繁荣的阶段。其主要表现是大批比较实用的面向对象编程语言的涌现,例如C++、Objective-C、Object Pascal、CLOS、Eiffel和Actor等。这些面向对象的编程语言分为纯OO型语言和混合型OO语言。混合型语言是在传统的过程式语言基础上增加了OO语言成分形成的,在实用性方面具有更大的优势。此时的纯OO型语言也比较重视实用性。现在,在面向对象编程方面,普遍采用语言、类库和可视化编程环境相结合的方式,如Visual C++、JBuilder和Delphi等。面向对象方法也从编程发展到设计、分析,进而发展到整个软件生命周期。

到20世纪90年代,面向对象的分析与设计方法已多达数十种,这些方法都各有所长。目前,统一建模语言已经成为世界性的建模语言,适用于多种开发方法。把UML作为面向对象的建模语言,不但在软件产业界获得了普遍支持,在学术界影响也很大。在面向对象的过程指导方面,目前还没有国际规范发布。当前较为流行的用于面向对象软件开发的过程指导有“统一软件开发过程”(RUP)和国内的青鸟面向对象软件开发过程指导等。

3 面向对象设计方法应用现状

当前,面向对象方法几乎覆盖了计算机软件领域的所有分支。例如,已经出现了面向对象的编程语言、面向对象的分析、面向对象的设计、面向对象的测试、面向对象的维护、面向对象的图形用户界面、面向对象的数据库、面向对象的数据结构、面向对象的智能程序设计、面向对象的软件开发环境和面向对象的体系结构等。此外,许多新领域都以面向对象理论为基础或作为 主要技术,如面向对象的软件体系结构、领域工程、智能代理、基于构件的软件工程和面向服务的软件开发等。

4 结语

计算机软件技术的发展日新月异,在很短的时间内即涌现出了大量的软件开发工具并迅速地更新换代,给编程人员进行程序设计带来了极大的方便。在不久的将来相信面向对象程序设计技术必将应用到更多的程序中。

【参考文献】

[1] 麻志毅,著.面向对象分析与设计.机械工业出版社,2013,2.

面向对象程序设计实习报告 篇9

endl 换行并刷新输出流

setw(n)设置字段位数为n hex,oct,dec 十六进制,八进制,十进制表示 setfill 定义填充字符

setprecision 定义浮点数的精度 left,right 左对齐,右对齐

showpoint 强制显示小数点以及全部尾部0 C++通过给常量命名的方式定义常量:

const<数据类型名><常量名>=<表达式> 用const定义的标识符常量时,一定要对其初始化。在说明时进行初始化是对这种常量置值的唯一方法,不能用赋值运算符对这种常量进行赋值。函数声明的一般形式为

函数类型 函数名(参数表)函数模板的定义

template

函数定义

例子:template T max(T a,T b){ return(a>b)? a:b;} 定义函数模板时可以使用多个类型参数,每个类型参数前面只需加上关键字typename或class,用逗号分隔:

template 例子:template T1 max(T1 a,T2 b){ return(a>b)? a :(T1)b;} 有默认参数的函数:实参与形参的结合是从左至右进行的,因此指定默认值的参数必须放在形参列表中的最右端 引用

定义

对变量起另外一个名字(别名alias),这个名字称为该变量的引用。<类型>&<引用变量名> = <原变量名>;

其中原变量名必须是一个已定义过的变量。如:

int

max;

int &refmax=max;refmax并没有重新在内存中开辟单元,只是引用max的单元。max与refmax在内存中占用同一地址,即同一地址两个名字。对引用类型的变量,说明以下几点:

1、引用在定义的时候要初始化

2、对引用的操作就是对被引用的变量的操作。

3、引用类型变量的初始化值不能是一个常数。

4、一旦引用被声明,它就不能再指向其它的变量。

5、对引用的初始化,可以用一个变量名,也可以用另一个引用。

6、引用同变量一样有地址,可以对其地址进行操作,即将其地址赋给一指针。当&m的前面有类型符时(如int &m),它必然是对引用的声明;如果前面无类型符(如cout<<&m),则是取变量的地址。

7、对常量(用const声明)的引用使用如下方式: int i=5;const int &a=i;内联函数定义的一般格式为:

inline <函数值类型><函数名>(<参数表>){ <函数体> } 作用域运算符

::a表示全局作用域中的变量a。注意:不能用::访问函数中的局部变量

new运算从堆中分配一块与<类型>相适应的大小为<元素个数>的数组存储空间,若分配成功,将这块存储空间的起始地址存入<指针变量名>,否则置<指针变量名>的值为NULL(空指针值,即0)。new的使用格式为:

<指针变量名>=new <类型>[<元素个数>];delete运算符用来释放<指针变量名>指向的动态存储空间。使用格式如下:

delete <指针变量名> 或

delete[] <指针变量名>

第2章 面向对象基本概念

面向过程编程与面向对象编程的区别:

面向过程编程先确定算法,再确定数据结构; 面向对象编程先确定数据结构,再确定运算。类定义:

class <类名> { <访问控制符>: <成员函数的声明> <访问控制符>: <数据成员的声明> };<成员函数的实现> 若在类体外实现,则需要使用作用域运算符“::”,用它来标识某个成员函数是属于哪个类的,其定义格式如下:

<函数值类型><类名>::<成员函数名>(<参数表>){ <函数体> } 类外访问对象中的成员可以有3种方法: 通过对象名和成员运算符访问对象中的成员。<对象名>.<公有成员> 通过指向对象的指针变量访问对象中的成员。<对象指针名>-><公有成员> 通过对象的引用访问对象中的成员。析构函数其定义格式如下: <类名>::~<类名>(){

<函数体> } 在一般情况下,调用构造函数与声明对象的顺序相同,而调用析构函数的次序正好与创建对象的顺序相反。三种构造函数

Box();

//无参构造函数 Box(int h,int w ,int len):height(h),width(w),length(len){}

//带参构造函数 复制构造函数定义

<类名>(<参数表>);

<类名>(const <类名>&<对象名>)Box(const Box& b);//复制构造函数

复制构造函数只有一个参数,并且是对同类对象的引用。

静态成员是类的所有对象共享的成员,而不是某个对象的成员,它在对象中不占存储空间,是属于整个类的成员。静态成员定义格式如下: static <静态成员的定义>;不能用参数初始化表对静态数据成员初始化,也不能在构造函数体内初始化,静态数据成员只能在类体外进行初始化。静态数据成员初始化格式如下:

<数据类型><类名>::<静态数据成员名>=<值>;在类的成员函数中可以直接访问该类的静态数据成员,而不必使用成员访问运算符或类名限定修饰符。

在类外必须使用成员访问运算符或类名限定修饰符访问公共静态数据成员。<对象名>.<静态成员> <类名>::<静态成员> 静态成员函数就是使用static关键字声明的成员函数。

静态成员函数可以直接访问该类的静态成员,但不能直接访问类中的非静态成员。

第3章 详解对象

对象指针就是用于存放对象数据起始地址的变量。声明对象指针的一般格式为: <类名> *<对象指针名>;对象指针的初始化一般格式为: <数据类型> *<对象指针名>=&<对象名>;<对象指针名>=&<对象名>;通过指针访问对象成员一般格式如下: <对象指针名>-><公有成员>

boxp->volumn();(*<对象指针名>).<公有成员>

(*boxp).volumn();this指针是一个特殊的隐含指针,它隐含于每一个成员函数(静态成员函数除外)中,也就是说,每个成员函数都有一个this指针参数。

this指针指向调用该函数的对象,即this指针的值是当前被调用的成员函数所在的对象的起始地址。

复制构造函数中隐含使用this指针: TAdd(const TAdd& p){

this->x=p.x;this->y=p.y;

cout<<“copy constructor.”<

x

this->x

(*this).x this指针是一个const指针,成员函数不能对其进行赋值。

静态成员中不能访问this指针,因为静态成员函数不从属于任何对象。指向非静态数据成员的指针一般形式为:

数据类型名

*指针变量名;

定义指向公有成员函数的指针变量的一般形式为: 数据类型名(类名:: *指针变量名)(参数列表);

使指针变量指向一个公有成员函数的一般形式为:

指针变量名=&类名::成员函数名 常量定义格式如下: const <数据类型名><常量名>=<表达式>;常对象是其数据成员值在对象的整个生存期间内不能被改变的对象。const <类名> <对象名>(<初始化值>);<类名> const <对象名>(<初始化值>);常成员函数

通过常成员函数来引用本类中的常数据成员。<数据类型><函数名>(<参数表>)const;

声明一维对象数组的一般格式为: <类名><数组名>[<下标表达式>] 6 第4章 运算符重载

重载为类的成员函数格式如下: <类名> operator <运算符>(<参数表>){ 函数体 } A operator +(A &);++为前置运算符时,它的运算符重载函数的一般格式为: operator ++()++为后置运算符时,它的运算符重载函数的一般格式为: operator ++(int)

运算符重载函数不能定义为静态的成员函数,因为静态的成员函数中没有this指针。

友元声明以关键字friend开始,只能出现在被访问类的定义中。具体格式如下:

friend <函数值类型><函数名>(<参数表>);friend class <类名>;

友元函数可以访问该类中的所有成员(公有的、私有的和保护的)

通常使用友元函数来取对象中的数据成员值,而不修改对象中的成员值,保证数据安全。

重载为类的友元函数语法形式

friend <函数值类型> operator <运算符>(<参数表>){<函数体>;} ++为前置运算符时,它的运算符重载函数的一般格式为: A operator ++(A &a)++为后置运算符时,它的运算符重载函数的一般格式为: A operator ++(A &a, int)

重载提取运算符的一般格式为:

friend istream & operater >>(istream &, ClassName &);istream & operater >>(istream &is, ClassName &f){„} 重载输出(插入)运算符的一般格式为:

friend ostream & operater >>(ostream &, ClassName &);ostream & operater >>(ostream &is, ClassName &f){„} 重载类型转换运算符函数格式: operator〈返回基本类型名〉(){

„„

return 〈基本类型值〉 } 类类型转换函数只能是成员函数,不能是友元函数。转换函数的操作数是对象。8 第5章 继承与派生

派生是指由基类创建新类的过程。class A { int i;//基类成员};class B:public A //A派生了B,B继承了A,//B自动拥有A的成员 {int j;//定义派生类的新成员};派生类的定义格式如下:

class <派生类名>:<继承方式><基类名> { <派生类新定义成员>};派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数,它们在派生类中的访问属性由继承方式控制。三种继承方式下派生类中基类成员的访问控制权限

无论是哪种继承方式,基类的私有成员在派生类中都是不可被访问的。只能通过基类的成员函数访问基类的私有数据成员。

解决的办法是通过成员初始化表来完成,在成员初始化表中可以显式调用基类构造函数。

<派生类名>(<总参数表>):<基类名>(<参数表1>),<对象成员名>(<参数表2>){ <派生类数据成员的初始化> };构造函数调用顺序为:基类的构造函数→对象成员构造函数→派生类的构造函数。

析构函数调用顺序刚好相反。当基类中没有显式定义构造函数,或定义了无参构造函数时,派生类构造函数的初始化表可以省略对基类构造函数的调用,而采用隐含调用。当基类的构造函数使用一个或多个参数时,派生类必须定义构造函数,提供将参数传递给基类构造函数的途径。这时,派生类构造函数的函数体可能为空,仅起到参数传递作用。

如果在基类中既定义了无参构造函数,又定义了带参构造函数,则在定义派生类构造函数时,既可以包含基类构造函数和参数,也可以不包含基类构造函数。如果在一个派生类中要访问基类中的私有成员,可以将这个派生类声明为基类的友元。

友元关系是不能继承的。B类是A类的友元,C类是B类的派生类,则C类和A类之间没有任何友元关系,除非C类声明A类是友元。多继承派生类的定义

class <派生类名>:<继承方式><基类名1>,„,<继承方式><基类名n> {<派生类新定义成员>};多继承派生类的构造函数

<派生类名>(<总参数表>):<基类名1>(<参数表1>),„,< 基类名n>(<参数表n>){ <派生类数据成员的初始化> };<总参数表>必须包含完成所有基类初始化所需的参数 构造函数调用顺序是:先调用所有基类的构造函数,再调用对象成员类构造函数,最后调用派生类的构造函数。

处于同一层次的各基类构造函数的调用顺序取决于定义派生类时所指定的基类顺序,与派生类构造函数中所定义的成员初始化列表顺序无关。如果有多个成员类对象,则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始化表中的顺序。

析构函数的调用顺序与构造函数的调用顺序相反。虚基类

虚基类的定义格式为:

class <派生类名>:virtual <继承方式><共同基类名>;【说明】引进虚基类后,派生类对象中只存在一个虚基类成员的副本。虚基类的初始化与一般多继承的初始化在语法上相同,但构造函数的调用顺序有所不同,规则如下:

先调用虚基类的构造函数,再调用非虚基类的构造函数。若同一层次中包含多个虚基类,其调用顺序为定义时的顺序。若虚基类由非虚基类派生而来,则仍按先调用基类构造函数,再调用派生类构造函数的顺序。

如果在虚基类中定义了带参数的构造函数,则要在其所有派生类(包括直接派生类或间接派生类)中,通过构造函数的初始化表对虚基类进行初始化。

第6章 多态性与虚函数

类型兼容规则

类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。

类型兼容规则中所指的替代包括以下情况: 派生类的对象可以赋值给基类的对象。派生类的对象可以初始化基类的引用。

派生类的对象的地址可以赋值给基类的指针变量。在替代之后,派生类对象就可以作为基类的对象使用,但只能访问从基类继承的成员。

只能用派生类对象对其基类对象赋值,而不能用基类对象对其派生类对象赋值。同一基类的不同派生类对象之间也不能赋值。虚函数

虚函数就是在基类中被关键字virtual说明、并在一个或多个派生类中被重新定义的成员函数。

声明虚函数的格式如下:

virtual <函数值类型><函数名>(<参数表>);在派生类中重新定义虚函数时,其函数原型包括返回类型、函数名、参数个数、类型和顺序,都必须与基类中的原型相同。一个函数一旦被声明为虚函数,则无论声明它的类被继承了多少层,在每一层派生类中该函数都保持虚函数特性。因此,在派生类中重新定义该函数时,可以省略关键字virtual。实现动态的多态性时,必须使用基类类型的指针变量或对象引用,并使其指向不同的派生类对象,并通过调用指针或引用所指向的虚函数才能实现动态的多态性。可将类簇中具有共性的成员函数声明为虚函数,而具有个性的函数没有必要声明为虚函数。但是下面的情况例外: 静态成员函数不能声明为虚函数。构造函数不能是虚函数。

内联成员函数不能声明为虚函数。析构函数可以是虚函数。虚析构函数

虚析构函数的声明格式如下:

virtual ~<类名>();如果一个类的析构函数是虚函数,那么,由它派生的所有子类的析构函数也是虚函数。

纯虚函数用virtual声明,没有任何实现、必须由派生类覆盖该函数提供实现 纯虚函数的声明格式为:

virtual <函数值类型><函数名>(<参数表>)=0;包含一个或多个纯虚函数的类称为抽象类。

如果派生类没有实现基类中的所有纯虚函数,派生类也是抽象类。抽象类无法实例化,即不能创建抽象类的对象。第7章 输入输出

iostream:I/O流类库的最主要的头文件,包含了对输入输出流进行操作所需的基本信息,还包括cin、cout、cerr和clog共4个流对象。fstream:用于用户管理的文件的I/O操作。strstream:用于字符串流I/O。

stdiostream:用于混合使用C和C++的I/O操作。iomanip:使用格式化I/O时应包含此头文件。

用setf函数设置状态标志,其一般格式如下:

long ios::setf(long flags)清除状态标志

用unsetf函数清除状态标志,其一般格式如下: long ios::unsetf(long flags)用函数flags取状态标志有两种形式,其格式分别如下: long ios::flags()

//返回与流相关的当前状态标志值 long ios::flags(long flag)//将流的状态标志值设置为flag,并返回设置前的状态标志值。以上三组函数必须用流类对象(cin或cout)来调用,其格式如下: <流对象名>.<函数名>(ios::<状态标志>)cout.setf(ios::showpos);cout.setf(ios::scientific);cout.setf(ios::showpos| ios::scientific);设置输出宽度函数有两种形式,其格式分别如下:

int ios::width(int len)

int ios::width()第一种形式是设置输出宽度,并返回原来的输出宽度;

第二种形式是返回当前输出宽度,默认输出宽度为0。只对其后的第一个输出项有效。

填充字符的作用是当输出值不满输出宽度时用填充字符来填充,默认填充字符为空格。它与width()函数配合使用,否则没有意义。设置填充字符函数有两种形式,其格式分别如下:

char ios::fill(char ch)

char ios::fill()第一种形式是重新设置填充字符,并返回设置前的填充字符; 第二种形式是返回当前的填充字符。

设置浮点数输出精度有两种形式,其格式分别如下:

int ios::precision(int p)

int ios::precision()第一种形式是重新设置输出精度,并返回设置前的输出精度; 第二种形式是返回当前的输出精度。默认输出精度为6 用get函数读入一个字符(1)不带参数的get函数

cin.get()用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符。

若遇到输入流中的文件结束符,则函数返回文件结束标志EOF。(2)有一个参数的get函数

cin.get(ch)用来从输入流中读取一个字符,赋给字符变量ch。读取成功返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。3)有三个参数的get函数

cin.get(字符数组/字符指针,字符个数n,终止字符)从输入流中读取n-1个字符,赋给指定的字符数组(或字符指针指向的数组)。如果在读取n-1个字符之前遇到指定的终止字符,则提前读取结束。如果读取成功返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。用getline函数读入一行字符

cin.getline(字符数组(或字符指针),字符个数n,终止字符)从输入流中读取一行字符,其用法与带3个参数的get函数类似。eof函数

无参函数,表示文件结束。

从输入流读取数据,如果到达文件末尾(遇文件结束符),返回非零值(真),否则为0(假)。

while(!cin.eof())peek函数

无参函数,表示“观察”,观测下一个字符。

返回值是当前指针指向的当前字符,但只是观测,指针仍停留在当前位置,并不后移。

如果要访问的字符是文件结束符,则函数值是EOF。

c=cin.peek(); putback函数

将前面用get或getline函数从输入流中读取的字符ch返回到输入流,插入到当前指针位置,以供后面读取。

控制符不属于任何类成员,定义在iomanip头文件中 设置输入/输出宽度setw(int)用整型参数来制定输入/输出域的宽度。使用时只对其后一项输入/输出有效。当用于输出时,若实际宽度小于设置宽度时,数据向右对齐,反之则按数据的实际宽度输出。

当用于输入时,若输入的数据宽度超过设置宽度时,超出的数据部分被截断而被作为下一项输入内容。

设置输出填充字符setfill(char)与ios::fill相同,常与setw(int)联合使用,从而向不满设置输出宽度的空间填入指定的字符,不设置则填空格。设置后直至下一次设置前一直有效。参数可以是字符常量或字符变量。

设置输出精度setprecision(int)指明输出实数的有效位数。

参数为0时,按默认有效位数6输出。

在以fixed形式和scientific形式输出时参数为小数位数。

setiosflags(ios::fixed)用定点方式表示实数。

setiosflags(ios::scientific)用科学记数法方式表示实数。

如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。

如果setprecision(n)与setiosflags(ios::scientific)合用,可以控制科学记数法中尾数的小数位数。

setiosflags(ios::left)输出数据左对齐 setiosflags(ios::right)输出数据右对齐

设置输入/输出整型数数制dec、hex和oct。控制换行的控制符endl

代表输出单字符“”的控制符ends open()函数的原型在fstream中定义。其原型为:

void open(char *filename,int mod,int access);其中第一个参数是用来传递文件名;第二个参数的值决定文件的使用方式;第三个参数的值决定文件的访问方式。

上一篇:有关2021年安全员自自我鉴定下一篇:秋意高二优秀作文600字