《C++程序设计教程(第3版)》——第1章,第3节程序设计方法

1.3 程序设计方法
C++语言的两个组成部分是过程性语言部分和“类”部分。过程性语言部分和C语言没有本质差别。“类”部分是C语言中没有的,它是面向对象程序设计的主体。要学好面向对象程序设计,首先必须具有过程性语言的基础。所以学习C++,首先必须学习其过程性语言部分,然后再学习“类”部分。
过程性语言部分采用的是结构化程序设计方法,“类”部分采用的是面向对象程序设计方法,程序设计方法正在从结构化方法向面向对象方法演变。C语言仅支持结构化程序设计,而C++语言既支持结构化程序设计也支持面向对象程序设计。

1.3.1 结构化程序设计方法
结构化程序设计的主要思想是:将任务按功能分解并逐步求精。将复杂的大型任务分解成若干模块,每个模块进一步划分成更小的、功能完整的子模块,继续划分直到得到原子模块,每个原子模块用一个过程或函数完成。一个过程或函数由多条可顺序执行的语句构成。编程者把数据与过程或函数分开存储。编写程序的主要技巧在于追踪函数的调用及返回过程,追踪在这个过程中数据发生了怎样的变化。结构化程序设计方法能够较好地分解并解决一些复杂任务。其主要缺点是,程序依赖于数据结构,当数据结构发生变化时,必须对过程或函数进行修改。另外,当开发一个新任务时,适用于旧任务的程序一般不能重复利用。从编程的角度来说需要重复投入,即重新开发程序。而基于可重用指导思想的面向对象程序设计方法能够较好地解决这一问题。

1.3.2 面向对象程序设计方法
面向对象程序设计(Object Oriented Programming,OOP)方法是近年来十分流行的一种程序设计方法,它试图用客观世界中描述事物的方法来描述一个程序要解决的问题。对象是客观世界中一个实际存在的事物,如一个具体的“人”就是一个对象。将“人”的共同属性抽象出来就可以构成“类”,如“人”类,它具备的静态属性有姓名、年龄、性别、身高和体重等,它同时具备的动态属性有学习、思考、走路、说话和吃饭等,一般将静态属性作为类的数据成员,而将动态属性作为类的执行代码。类是一个抽象的概念,而对象是类的具体实例,如“人”类的一个对象就是指一个具体的人。
面向对象程序设计的3个主要特性如下所示。
1)封装性 封装是实现信息隐蔽的基础。将描述对象的数据(静态属性)及对这些数据进行处理的程序代码(动态属性)有机地组成一个整体,同时对数据及代码的访问权限加以限制,这种特性称为封装。封装可以使对象内部的数据隐藏起来,在类外不能直接访问它们,而只能通过对象的公有执行代码接口来间接访问对象内部的数据。这样既可保护类中的数据成员,也可使编程者只关心该对象可完成的动作,而不必去关心其内部的数据及代码实现细节。
2)继承性 继承是软件重用的基础,它可以提高软件开发效率。通过继承可以在已有类的基础之上扩充并产生一个新类。已有类称为基类或父类,新类称为派生类或子类。派生类除了继承基类的数据及代码之外,可以按需要增加数据和代码。基类的数据和代码在派生类中是可以直接使用的,即基类的代码可以在派生类中重复利用,这就是软件重用,它可以提高代码编写效率。
3)多态性 多态性是提高编程效率及提高编程灵活性的机制。多态分为静态多态和动态多态。
静态多态 静态多态分为函数重载、运算符重载、函数模板和类模板。
函数重载是指同名函数完成不同功能,一般用于完成类似功能,如两个同名函数abs(),分别可以用来求整型量和实型量的绝对值。如果没有函数重载机制,求整型量和实型量的绝对值就必须用两个不同的函数名来实现。函数重载减轻了编程时记忆多个完成类似功能的函数名的负担。
运算符重载是将C++提供的基本运算符应用到新类的机制。例如,加号(+)运算符可以实现C++基本数据类型的整型量、实型量的相加等。对于用户新定义的类如“复数”类,通过运算符重载机制,可以使用加号实现两个复数对象的直接相加。
函数模板是将结构相同而仅仅数据类型不同的多个函数进行数据类型虚拟化得到的函数的抽象描述。类模板是将结构相同而仅仅数据类型不同的多个类进行数据类型虚拟化得到的类的抽象描述。在调用函数模板和使用类模板定义对象时,编译器能够根据实际的数据类型以函数模板和类模板为基础自动生成含有具体类型的函数和类,以提高编程的自动化水平,即提高编程效率。
动态多态 动态多态是指不同的对象在接收到相同的消息后,以不同的行为去应对。所谓消息是指对象接收到的需要执行某个“操作”的命令,操作是函数完成的。动态多态的实现机制是,在基类中定义完成某个操作的虚函数,在不同的派生类中重新定义完成这个“操作”的同名函数,不同派生类中的这些函数完成不同的工作,那么不同派生类对象接收到同样的“消息”时,就可以表现出不同的行为。
例如,基类是一个抽象的“几何图形”,它具有“绘图”行为,但这个行为没有具体含义,因为并不知道具体绘制什么图形。从“几何图形”类派生出“三角形”类、“圆”类或“矩形”类,在派生类中“绘图”功能有具体含义,可重新定义“绘图”功能,实现具体图形的绘制。在基类中的虚拟共同行为“绘图”,在派生类中具有不同的实现行为。不同的派生类对象接收到“绘图”消息时,即产生了不同的行为。
动态多态既提供了“消息”的统一入口,又实现了不同对象对同一消息的不同响应,提高了编程的灵活性。

时间: 2024-10-09 22:27:04

《C++程序设计教程(第3版)》——第1章,第3节程序设计方法的相关文章

《编程珠玑(第2版•修订版)》—第1章1.3节程序设计

1.3 程序设计显而易见的方法是以一般的基于磁盘的归并排序程序为起点,但是要对其进行调整,因为我们是对整数进行排序.这样就可以将原来的200行程序减少为几十行,同时也使得程序运行得更快,但是完成程序并使之运行可能仍然需要几天的时间. 另一种解决方案更多地利用了该排序问题的特殊性.如果每个号码都使用7个字节来存储,那么在可用的1 MB存储空间里大约可以存143 000个号码.如果每个号码都使用32位整数来表示的话,在1 MB存储空间里就可以存储250 000个号码.因此,可以使用遍历输入文件40趟

搜索引擎优化技术教程之完全版 第四章 SEO指导下的技术支持

     对搜索引擎最友好(Search Engine Friendly)的网页是静态网页,但大部分内容丰富或互动型网站都不可避免采用到相关技术语言来实现内容管理和交互功能.SEO 思想指导下的技术支持,主要是对特定代码的优化和对动态网页进行静态处理的措施.          Title 和 Meta 标签      以.html 或.htm 为扩展名的 HTML 文档称为静态网页.Meta 称为元标志,用于网页的<head >与</head>中.Meta 标签的用处很多,目前几乎

搜索引擎优化技术教程之完全版 第七章 网页级别(PageRank)

第七部分:网页级别(PageRank)      Google搜索引擎采用的核心软件称为 PageRank,这是由Google创始人开发出的一套用于网页评级的系统,是Google搜索排名算法中的一个组成部分,级别从1到10级,10级为满分,PR值越高说明该网页在搜索排名中的地位越重要,也就是说,在其他条件相同的情况下,PR值高的网站在Google搜索结果的排名中有优先权.网页级别由此成为Google所有网络搜索工具的基础.              网页级别概述 Google对网页级别的描述  

搜索引擎优化技术教程之完全版 第六章 走在钢丝绳上的SEO作弊

第六部分:走在钢丝上的搜索引擎优化作弊      由于技术型搜索引擎在网站排名过程中完全由蜘蛛程序自动完成,未有人工参与,这为那些针对排名原理而采用欺骗蜘蛛程序的手段提供成功的可能性.因此在 SEO 的发展过程中,一直伴随着关于作弊方法的讨论,成为业界关注的话题.              SEO 作弊手段      做 SEO 必须了解基本的作弊手段,目的是避免无意间采用了相关手段遭到处罚.以下是被视为作弊的常见手段: 1.关键字堆砌:      为了增加关键词的出现频次,故意在网页代码中,如

搜索引擎优化技术教程之完全版 第三章 网页优化制作

第三部分:对搜索引擎友好的网页设计制作      一般的网页设计都由网页设计师完成.设计师设计网站往往仅从美观.创意和易用的角度考虑,这对于一个期望获得搜索引擎排名优秀的商业网站来说,已经远远不够了,网站策划人员至少应该为设计师递交一份需求备忘录,提醒在设计中需要配合和注意的环节.          目录结构和 URL      URL 是统一资源定位,即每个网页的网址.路径.网站文件的目录结构直接体现于 URL.清晰简短的目录结构和规范的命名不仅有利于用户体验和网址传播,更是搜索引擎友好的体现

windows程序设计(第五版)第22章的drum.c中的问题?

问题描述 windows程序设计(第五版)第22章的drum.c中的问题? windows程序设计(第五版)第22章的drum.c中的这段,没弄明白作者的想法, " if (x >= 0 && x < 32 && y >= 0 && y < NUM_PERC) { if (message == WM_LBUTTONDOWN) drum.dwSeqPerc[y] ^= (1 << x) ;//这里不明白,作者为什么

《C语言编程——零基础初学者指南(第3版)》一第1章 什么是C程序设计1.1 什么是程序

第1章 什么是C程序设计 C语言编程--零基础初学者指南(第3版)本章内容 理解C程序设计的基本要素找到并安装C编译器学习编程过程的步骤许多人都认为C语言难学难用,不过你很快会发现事实并非如此.C语言被认为是一门神秘的程序设计语言,它的确可以成为这样的语言.但是,具有良好编程风格的C语言程序,也可以像其他程序设计语言编写的程序一样,简单易懂.当今社会对程序员和开发者的要求越来越高,学习C语言为进入各个领域(如,应用开发.游戏编程等)打下了坚实而有效的基础. 如果你从未编写过程序,不用担心,本章将

急求清华大学出版的JAVA程序设计教程(第五版)(作者:H.M.Deitel等施平安等翻译)的课后练习题答案…

问题描述 急求清华大学出版的JAVA程序设计教程(第五版)(作者:H.M.Deitel等施平安等翻译)的课后练习题答案- 解决方案 解决方案二:我也在找

《C++程序设计教程(第3版)》——第3章,第1节传统的输入输出函数实现方法

第3章 简单的输入输出通过前面的章节我们了解了组成一个程序的基本数据元素,下面我们就可以在数据元素的基础上开始学习编写简单的C++程序了.本章主要介绍计算机程序设计的基础:在C++程序中实现数据输入输出的基本方法.由于C++中数据输入输出的实现机制与后续章节中的面向对象重载等技术有着密切的联系,因此在没有系统地学习面向对象设计思想之前无法对此进行详细的介绍.因此,本章只对C++中数据输入输出的使用方法做简单的介绍.有关C++编译器提供的完整的输入输出流体系结构的实现原理,将在第14章中进行详细的

《Oracle PL/SQL程序设计(第5版)》一一1.5 PL/SQL开发人员的资源

1.5 PL/SQL开发人员的资源 Oracle PL/SQL程序设计(第5版) O'Reilly在1995年出版了本书的第一版.当时,Oracle PL/SQL编程这本书确实造成一个小轰动.它是第一本关于PL/SQL的独立著作(也就是,不是来自于Oracle公司的).从那时开始,PL/SQL程序员的资源─图书.开发环境.工具以及网站─开始蓬勃发展.(当然,迄今为止这本书仍然是这些资源中最重要和最有价值的!) 下面这一节简要地介绍了这许多资源.要充分利用这些资源,许多资源都可以免费获得或者非常低