Stay Hungry,Stay Foolish.

任何人都能写出机器能看懂的代码,但只有优秀的程序员才能写出人能看懂的代码。

有两种写程序的方式:一种是把代码写得非常复杂,以至于 “看不出明显的错误”;另一种是把代码写得非常简单,以至于 “明显看不出错误”。

“把正确的代码改快速”,要比 “把快速的代码改正确”,容易得太多。

C++ 庞大、复杂是无法改变的事实,所以我们要把这三条格言铭记在心,对它保持一颗 “敬畏” 的心,在学习语言特性的同时,千万不要滥用特性,谦虚谨慎,戒骄戒躁。                -------CSDN Albert Edison

恰逢研究生考试成绩出分,在此恭祝所有人第一志愿上岸,以后要考研的人也都能更上一层楼!

目录

面向对象的程序设计:

1. 面向过程

2. 面向对象

3. 优缺点比较

面向过程

面向对象

课程目标

C++版本更迭:

易错点总结:

面向对象的程序设计:

面向对象与面向过程的区别与联系_心亦无忧的博客-CSDN博客_面向对象和面向过程的区别

面向过程 VS 面向对象

学习编程, 基本功是掌握编程语言,但编程的本质是逻辑,所以编程思维的培养也很重要。面向过程和面向对象是两种重要的编程思想,下面讲述一下这两者的区别和优缺点比较。

1. 面向过程

面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。

举个例子,下五子棋,面向过程的设计思路是首先分析解决这个问题的步骤:

(1)开始游戏(2)黑子先走(3)绘制画面(4)判断输赢(5)轮到白子(6)绘制画面(7)判断输赢(8)返回步骤(2) (9)输出最后结果。

用函数实现上面一个一个的步骤,然后在下五子棋的主函数里依次调用上面的函数(不同的编程语言有不同的调用方法,我这里写的是直接调用):

下五子棋{开始游戏();黑子先走();绘制画面();判断输赢();轮到白子();绘制画面();判断输赢();返回到 黑子先走();输出最后结果;}

可见,面向过程始终关注的是怎么一步一步地判断棋局输赢的,通过控制代码,从而实现函数的顺序执行。

2. 面向对象

在日常生活或编程中,简单的问题可以用面向过程的思路来解决,直接有效,但是当问题的规模变得更大时,用面向过程的思想是远远不够的。所以慢慢就出现了面向对象的编程思想。世界上有很多人和事物,每一个都可以看做一个对象,而每个对象都有自己的属性和行为,对象与对象之间通过方法来交互。面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。

在下五子棋的例子中,用面向对象的方法来解决的话,首先将整个五子棋游戏分为三个对象:

(1)黑白双方,这两方的行为是一样的。

(2)棋盘系统,负责绘制画面

(3)规则系统,负责判定犯规、输赢等。

然后赋予每个对象一些属性和行为:

(4)第一类对象(黑白双方)负责接受用户输入,并告知第二类对象(棋盘系统)棋子布局的变化,棋盘系统接收到了棋子的变化,并负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以看出,面向对象是以功能来划分问题,而不是以步骤解决。比如绘制画面这个行为,在面向过程中是分散在了多个步骤中的,可能会出现不同的绘制版本,所以要考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘系统这个对象中出现,从而保证了绘图的统一。

3. 优缺点比较

面向过程

优点:

流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结果,具体步骤清楚,便于节点分析。

效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。

缺点:

需要深入的思考,耗费精力,代码重用性低,扩展能力差,后期维护难度比较大。

面向对象

优点:

结构清晰,程序是模块化和结构化,更加符合人类的思维方式;

易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;

易维护,系统低耦合的特点有利于减少程序的后期维护工作量。

缺点:

开销大,当要修改对象内部时,对象的属性不允许外部直接存取,所以要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。

性能低,由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小都开销很大。

举例说明两者的优缺点,比如在五子棋游戏中增加悔棋的功能。在面向过程中,从输入到显示再到最后判断的整个步骤都要改动,甚至函数的调用顺序也要改动,而在面向对象的设计中,只需在棋盘系统中增加一个回溯的功能就可以了,黑白双方和规则系统的属性和行为都不需改动。这个例子说明了面向对象程序设计中代码间的相关性低(低耦合特性),使得代码很容易被复用和扩展,同时也说明了面向过程的代码重用性低、扩展能力差。

c++中可以使用x=float(i)来强行转换数据类型

函数形式的数据转换

课程目标

1.理解面向对象程序设计的基本原理,掌握面向对象技术的基本概念和封装性、继承性和多态性,能够具有面向对象程序设计思想。掌握C++语言面向对象的基本特性和C++语言基础知识,能够使用C++语言进行计算机工程领域复杂工程问题的表述,能够进行C++程序阅读和分析。

2.理解C++语言中的面向对象机制,掌握C++程序设计的一般流程、基本方法和技能。能够综合应用基础知识对复杂的计算机系统工程问题进行用户需求分析,并能够采用面向对象方法进行程序设计。

3.熟练掌握VC++集成开发工具的使用方法和技巧,能正确编辑、编译和调试C++语言程序,能够具有良好的程序调试和动手编程能力,并能够利用计算机软件对计算机领域的复杂工程问题进行面向对象分析,建立面向对象的系统模型,并对分析阶段建立的对象模型进行面向对象设计。

C++版本更迭:

易错点总结:

1.int a*p此处int的含义是指针的基类型

2.Struct Student*p age=

p=&stu 1

3.if (x=1)赋值语句

if (x==1)判断

4.顺序求值表达式>>最终会得到一个值

int x=6,y>x,y=x,y++;

printf(“%d\n”,y>x,y=x,y++;);

输出结果会为6

面向对象的程序设计C++课堂复盘总结 C语言复习+C++基础语法相关推荐

  1. python编程入门与案例详解-Python程序设计案例课堂

    Python程序设计案例课堂 第Ⅰ篇 基础知识 1 揭开Python神秘面纱 1.1 什么是Python 1.2 Python的优点和特性 1.2.1 Python的优点 1.2.2 Python的特 ...

  2. 理解面向过程和面向对象的程序设计方法

    一.结构化程序设计 1,概念: 传统的结构化程序设计思想的核心是功能的分解.将问题分解为多个功能模块,根据模块功能来设计用于存储数据的数据结构,最后编写了过程(函数)对数据进行操作实现模块的功能.程序 ...

  3. 面向对象的程序设计——理解对象

    面向对象的程序设计 ECMA-262 把对象定义为:无须属性的集合,其属性可以包含基本值.对象或者函数. 理解对象 var person = new Object(); //创建对象 person.n ...

  4. javascript高级程序设计第3版——第6章 面向对象的程序设计

    第六章--面向对象的程序设计 这一章主要讲述了:面向对象的语言由于没有类/接口情况下工作的几种模式以及面向对象语言的继承: 模式:工厂模式,构造函数模式,原型模式 继承:原型式继承,寄生式继承,以及寄 ...

  5. 面向对象的程序设计在游戏开发中使用(一):类

    我并不是游戏开发的从业人员,甚至连软件开发都不是,但至少我是程序员. 我认为,一个[面向对象]的理念在学习过程中的重要性远大于对于代码本身含义的认识. 这一点可以在诸多书籍中得到论证,但很奇怪的一件事 ...

  6. JS面向对象的程序设计之继承-继承的实现-借用构造函数

    JS面向对象的程序设计之继承-继承的实现-借用构造函数 前言:最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下.如有纰漏或错误 ...

  7. [Python3]Python面向对象的程序设计

    [Python3]Python面向对象的程序设计 一.面向对象的程序设计的由来 1.第一阶段:面向机器,1940年以前 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行 ...

  8. python基础——面向对象的程序设计

    python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  9. java程序设计经典课堂讲课_Java程序设计与开发经典课堂

    目 录 第1章 零起步学Java 1.1 Java语言的发展历史和特点 /2 1.2 Java程序的运行机制 /4 1.3 Java开发环境的建立 /5 1.3.1 JDK的安装 /5 1.3.2 系 ...

最新文章

  1. 币圈王哥:BTC多头局面进一步打开,BCH再现强势姿态
  2. golang beego 文件上传
  3. 生鲜配送小程序源码_生鲜果蔬配送小程序开发源码
  4. oracle如何清空用户信息,Oracle数据库如何创建和删除用户
  5. Qt学习笔记之常用控件QTreeWidget
  6. c语言增强图像直方图均衡化,图像直方图均衡化增强opencv与C语言版
  7. CNN-2: AlexNet 卷积神经网络模型
  8. Linux的实际操作:用户管理(用户组的管理groupadd useradd usermod)
  9. linux入门指令 详解,Linux基础命令之mktemp详解
  10. 【雕爷学编程】Arduino动手做(16)---数字触摸传感器
  11. python输入生日判断星座_用java编一个程序能通过用户输入的生日判断用户的星座。请大神们给点提示或者思路吧。规定不能自定义方法...
  12. scratch绘制多边形_如何使用Scratch 3绘制矢量图形
  13. 删除病毒ETH的方法 如何解密sql文件 恢复mdf数据库文件
  14. ios 7.1企业证书无线安装
  15. 最坑爹的硬盘:希捷ST2000DM001
  16. come的喂abc是什么梗
  17. mac os 系统word文档批量更改图片尺寸问题汇总
  18. Visual Studio 2017 激活密钥 [复制记录]
  19. Proxy(代理)服务器
  20. 【前端小卡】npm从0-1发布一个属于自己的包

热门文章

  1. 使用dig/nslookup命令查看dns解析详情
  2. Javascript 计算请假天数
  3. P1424 小鱼的航程(改进版)
  4. BH1750( GY-302 )光照传感器
  5. (三)并发编程:特殊的一个单线程:主线程(Main线程)
  6. 网卡地址能查计算机位置吗,如何通过网卡地址查找到丢失的电脑
  7. win10切换输入法快捷键_怎么给电脑win10添加其他语言输入?例:日语,俄语
  8. Hadoop学习笔记(5)–完全分布式Hadoop 完全分布式
  9. Sparse R-CNN: End-to-End Object Detection with Learnable Proposals
  10. 这些低代码平台,你是否知悉?