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

简介: Stay Hungry,Stay Foolish.任何人都能写出机器能看懂的代码,但只有优秀的程序员才能写出人能看懂的代码。有两种写程序的方式:一种是把代码写得非常复杂,以至于 “看不出明显的错误”;另一种是把代码写得非常简单,以至于 “明显看不出错误”。“把正确的代码改快速”,要比 “把快速的代码改正确”,容易得太多。C++ 庞大、复杂是无法改变的事实,所以我们要把这三条格言铭记在心,对它保持一颗 “敬畏” 的心,在学习语言特性的同时,千万不要滥用特性,谦虚谨慎,戒骄戒躁。 -------CSDN Albert Edison

Stay Hungry,Stay Foolish.


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


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


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


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


面向对象的程序设计:


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


面向过程 VS 面向对象


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


1. 面向过程


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

20.png




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


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


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


下五子棋{

开始游戏();

黑子先走();

绘制画面();

判断输赢();

轮到白子();

绘制画面();

判断输赢();

返回到 黑子先走();

输出最后结果;

}


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


2. 面向对象


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



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


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


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


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


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


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


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



3. 优缺点比较


面向过程

优点:


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


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


缺点:


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


面向对象

优点:


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


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


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


缺点:


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


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

2.jpg




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



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


                               函数形式的数据转换

3.jpg



课程目标


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


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


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

4.jpg5.jpg6.jpg7.jpg8.jpg9.jpg10.jpg11.jpg12.jpg13.jpg14.jpg15.jpg16.jpg17.jpg







C++版本更迭:


20.png


易错点总结:


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




目录
相关文章
|
6月前
|
存储 编译器 开发工具
01.C++基础语法
本教程系统讲解C++基础语法,涵盖语言特性、编译器使用、命名空间、头文件、修饰符与关键字等核心内容,助你快速掌握C++编程基础。
380 9
|
9月前
|
安全 C语言 C++
比较C++的内存分配与管理方式new/delete与C语言中的malloc/realloc/calloc/free。
在实用性方面,C++的内存管理方式提供了面向对象的特性,它是处理构造和析构、需要类型安全和异常处理的首选方案。而C语言的内存管理函数适用于简单的内存分配,例如分配原始内存块或复杂性较低的数据结构,没有构造和析构的要求。当从C迁移到C++,或在C++中使用C代码时,了解两种内存管理方式的差异非常重要。
335 26
|
编译器 C语言 C++
☺初识c++(语法篇)☺
☺初识c++(语法篇)☺
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
330 19
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
534 13
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
457 5
|
存储 C++
【C++面向对象——输入输出流】处理二进制文件(头歌实践教学平台习题)【合集】
本任务要求使用C++读取二进制文件并在每行前添加行号后输出到控制台。主要内容包括: 1. **任务描述**:用二进制方式打开指定文件,为每一行添加行号并输出。 2. **相关知识**: - 流类库中常用的类及其成员函数(如`iostream`、`fstream`等)。 - 标准输入输出及格式控制(如`cin`、`cout`和`iomanip`中的格式化函数)。 - 文件的应用方法(文本文件和二进制文件的读写操作)。 3. **编程要求**:编写程序,通过命令行参数传递文件名,使用`getline`读取数据并用`cout`输出带行号的内容。 4. **实验步骤**:参考实验指
385 5
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
395 5
|
存储 编译器 C语言
【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
本文档介绍了C语言环境配置和编程任务,主要内容包括: - **C语言环境配置**:详细讲解了在Windows系统上配置C语言开发环境的步骤。 - **第1关:程序改错**:包含任务描述、相关知识(如头文件引用、基本语法规则)、编程要求、测试说明及通关代码。 - **第2关:scanf函数**:涉及`scanf`和`printf`函数的格式与使用方法,提供编程要求、测试说明及通关代码。 文档结构清晰,涵盖从环境搭建到具体编程任务的完整流程,适合初学者学习和实践。
467 4
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
323 4