[C++]从面向过程到面向对象

面向过程 ——步骤化:是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象 ——行为化:面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为
**面向过程和面向对象的优缺点:**面向过程:
优点:性能上它是优于面向对象的,因为类在调用的时候需要实例化,开销过大。缺点:不易维护、复用、扩展面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护缺点:低耦合:简单的理解就是说,模块与模块之间尽可能的独立,两者之间的关系尽可能简单,尽量使其独立的完成成一些子功能,这避免了牵一发而动全身的问题。性能比面向过程低了解完面向对象和面向过程的基本概念之后,我们来看一下类和对象是什么?
**什么是类?**类,即类别:类是具有相似属性和行为的一组实例集合
**什么是对象?**对象,即类的实例:现实世界是由各种各样的事物组成,包括真实的事物和抽象的事物。例如,人、动物、汽车(真实的事物)和程序、直线(抽象的事物)等。
每一类事物都有自己特定的属性(如大小、形状、重量等)和行为(如生长、行走、转弯、运算等),人们通过研究事物的属性和行为而认识事物。在计算机科学中将这些现实世界中的事物称之为对象。
面向对象四大特征
抽象抽象是人类认识问题的最基本手段之一。抽象是指对具体问题(对象)进行概括,抽出一类对象的公共属性和行为并加以描述的过程。类是对象的抽象,对象是类的特例。封装封装是把每个对象的数据(属性)和操作(行为)包装在一个类中。一旦定义了对象的属性和行为,则必须决定哪些属性和行为只用于表示内部状态,哪些属性和行为在外部是可见的。 封装保证了模块具有较好的独立性,使得程序维护修改较为容易。继承继承是指一个新类可以从现有的类派生而来。新类继承了现有类的特性,包括一些属性和行为,并且可以修改或增加新的属性和行为,使之适合具体的需要。继承为了重用父类代码,同时为实现多态性作准备。多态多态性是指类中具有相似功能的同名函数,并根据不同类的对象对同一消息产生的不同行为。如何定义类我们先不说多么高深的东西,大家都学过c语言吧!在c++中,我们可以使用结构体表示类。
#includeusing namespace std;struct stu //定义学生结构{ int id; int age; char name[10];};int main(){ stu cplus;//前面讲过在c++中可以省略,struct关键字 cplus.id = 100; cplus.age = 5; strcpy(cplus.name, c语言plus); cout << cplus.id << << cplus.age << << cplus.name << endl; return 0;}output:100 5 c语言plus这种写法大家都非常熟悉吧,不知道大家发现没有,如果我要输出学生的所有信息我就需要写一行输出代码,有的伙伴会说,我们可以把输出封装成函数,确实可以。
void showstuinfo(stu s){ cout << s.id << << s.age << << s.name << endl;}但是这样做也有不方便之处,每次输出时,需要传入一个学生的参数,麻烦。这里我们可以使用面向对象的思想,把行为(输出信息)也封装到结构体中(在c语言中是不允许的)。
struct stu //定义学生结构{ int id; int age; char name[10]; void showstuinfo(stu s){ cout << s.id << << s.age << << s.name << endl; }};访问方法:cplus.showstuinfo(cplus);访问成员函数的方法,和访问成员变量的方法一样,用成员运算符.即可,但是这里大家又会发现一个问题,既然是哦通过cplus访问的输出函数,那为啥还要传一个cplus进去,不是多此一举吗?
确实,如果在结构体内部函数中,访问自己的成员就不需要通过传参来使用了,可以直接使用,如:
struct stu //定义学生结构{ int id; int age; char name[10]; void showstuinfo(){ cout << id << << age << << name << endl; }};很简单吧,那么同样,对于初始化函数,咱们也可以把它写到结构体里面去
struct stu //定义学生结构{ int id; int age; char name[10]; void init(int sid = 0, int sage = 0, const char* sname = null){ id = sid; age = sage; strcpy(name, sname); } void showstuinfo(){ cout << id << << age << << name << endl; }};int main(){ stu cplus;//前面讲过在c++中可以省略,struct关键字 cplus.init(); cplus.showstuinfo(); return 0;}

纳微GaNFast国际通用MU充电器评测
理光正式宣布即将推出宾得旗舰APS-C单反相机
什么是物联网模块,怎样选择合适的物联网模块
视觉跳动智能激光屏|以简单对抗复杂,做工程师友好型产品
Henrik Fisker正在研发的自动驾驶穿梭小巴
[C++]从面向过程到面向对象
UNIX操作系统类型
从逻辑IC工艺28nm至7nm 技术迭代加快,开发成本激增
势均力敌还是先胜一筹?华为p10vs三星s8:一些瑕疵影响战局
myArm 全新七轴桌面型机械臂
凯翔科技携手中国电信打造MegaBric分布式块存储一体机
4+64g,首发联发科x30,2699元起,魅族pro7曝光
雷声公司推出面向中程防空的新型GhostEye MR雷达
ISSCC 2019,思特威成为图像传感领域首次入选的中国企业!
风力发电的优缺点
健身房智能镜子显示器可自动记录每一天身体的变化
initcall实现原理和调试方法介绍
名门锁业滑盖指纹锁EZ06A简介
微软亚洲研究院"创新汇": AI为数字化转型注入动能
LED价格贴近成本价 2016年LED跌价空间有限