0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

汽车电子威廉希尔官方网站 来源:C语言Plus 作者: Maye426 2023-02-27 15:38 次阅读

面向过程 ——步骤化:是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象 ——行为化:面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为

**面向过程和面向对象的优缺点:**面向过程:

  • 优点:性能上它是优于面向对象的,因为类在调用的时候需要实例化,开销过大。
  • 缺点:不易维护、复用、扩展

面向对象:

  • 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
  • 缺点:
    • 低耦合:简单的理解就是说,模块与模块之间尽可能的独立,两者之间的关系尽可能简单,尽量使其独立的完成成一些子功能,这避免了牵一发而动全身的问题。
    • 性能比面向过程低

了解完面向对象和面向过程的基本概念之后,我们来看一下类和对象是什么?

**什么是类?**类,即类别:类是具有相似属性和行为的一组实例集合

**什么是对象?**对象,即类的实例:现实世界是由各种各样的事物组成,包括真实的事物和抽象的事物。例如,人、动物、汽车(真实的事物)和程序、直线(抽象的事物)等。

每一类事物都有自己特定的属性(如大小、形状、重量等)和行为(如生长、行走、转弯、运算等),人们通过研究事物的属性和行为而认识事物。在计算机科学中将这些现实世界中的事物称之为对象。

面向对象四大特征

  • 抽象抽象是人类认识问题的最基本手段之一。抽象是指对具体问题(对象)进行概括,抽出一类对象的公共属性和行为并加以描述的过程。类是对象的抽象,对象是类的特例。
  • 封装封装是把每个对象的数据(属性)和操作(行为)包装在一个类中。一旦定义了对象的属性和行为,则必须决定哪些属性和行为只用于表示内部状态,哪些属性和行为在外部是可见的。 封装保证了模块具有较好的独立性,使得程序维护修改较为容易。
  • 继承继承是指一个新类可以从现有的类派生而来。新类继承了现有类的特性,包括一些属性和行为,并且可以修改或增加新的属性和行为,使之适合具体的需要。继承为了重用父类代码,同时为实现多态性作准备。
  • 多态多态性是指类中具有相似功能的同名函数,并根据不同类的对象对同一消息产生的不同行为。

如何定义类

我们先不说多么高深的东西,大家都学过C语言吧!在C++中,我们可以使用结构体表示类。

#include
using 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;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 分析
    +关注

    关注

    2

    文章

    134

    浏览量

    33317
  • 函数
    +关注

    关注

    3

    文章

    4332

    浏览量

    62666
  • 调用
    +关注

    关注

    0

    文章

    8

    浏览量

    3241
收藏 人收藏

    评论

    相关推荐

    C语言实现面向对象的方式 C++中的class的运行原理

    这里主要介绍下在C语言中是如何实现的面向对象。知道了C语言实现面向对象的方式,再联想下,
    发表于 10-21 09:00 1138次阅读

    基于C/C++面向对象的方式封装socket通信类

    在掌握了基于 TCP 的套接字通信流程之后,为了方便使用,提高编码效率,可以对通信操作进行封装,本着有浅入深的原则,先基于 C 语言进行面向过程的函数封装,然后再基于 C++ 进行
    的头像 发表于 12-26 09:57 1355次阅读

    C++笔记005:用面向过程面向对象方法求解圆形面积

    键盘输入的内容流到了某某某中!面向过程程序比较简单,只要有一些C语言的基础,加上对C++输入输出流就可以了!第二,面向
    发表于 03-05 12:59

    面向对象编程总结

    如何面向过程面向对象OOP?面向
    发表于 09-29 08:19

    什么是向对象?什么叫面向过程

    节,if, for, while循环什么的,感觉也就能算一些小学就会的题目,全国计算机等级二级也就糊涂的过了。我这个专业没学过C++,一开始不知道什么是向对象,什么叫面向过程,这可能让
    发表于 12-17 06:28

    C++ 面向对象多线程编程下载

    C++ 面向对象多线程编程下载
    发表于 04-08 02:14 70次下载

    Visual C++面向对象与可视化程序设计习题解析与编程实

    Visual C++面向对象与可视化程序设计习题解析与编程实例最基本的概念出发,详细地讲述了使用Visual C++进行
    发表于 07-12 15:16 0次下载
    Visual <b class='flag-5'>C++</b><b class='flag-5'>面向</b><b class='flag-5'>对象</b>与可视化程序设计习题解析与编程实

    面向对象程序设计—C++语言描述_PDF版

    电子发烧友网站提供《面向对象程序设计—C++语言描述_PDF版.txt》资料免费下载
    发表于 09-24 15:44 0次下载

    面向对象的程序设计(C++

    面向对象的程序设计(C++).面向对象的基本思想 C++
    发表于 03-22 14:40 0次下载

    C++语言和面向对象程序设计教程

    C++语言和面向对象程序设计代表了旨在使计算机问题解更加符合人的思维活动,是软件开发方法的一场革命;面向对象建模和
    发表于 03-02 08:00 6次下载

    为什么要用C语言实现面向对象

    不知道有多少人去了解过语言的发展史,早期C语言的语法功能其实比较简单。随着应用需求和场景的变化,C语言的语法功能在不断升级变化。 虽然我们的教材有这么一个结论:C语言是面向
    的头像 发表于 11-05 18:05 1716次阅读
    为什么要用<b class='flag-5'>C</b>语言实现<b class='flag-5'>面向</b><b class='flag-5'>对象</b>

    C语言是如何实现面向对象

    C++面向对象 的编程语言,但面向对象的概念是在C语言阶段就有了,而且应用到了很多地方,比
    的头像 发表于 12-24 17:08 2w次阅读
    <b class='flag-5'>C</b>语言是如何实现<b class='flag-5'>面向</b><b class='flag-5'>对象</b>的

    面向对象开发的SOLID五大基本原则

    C语言开发的应该都知道,C面向过程开发的,而c++面向
    的头像 发表于 10-17 14:31 789次阅读

    C语言是怎么面向对象编程

    在嵌入式开发中,C/C++语言是使用最普及的,在C++11版本之前,它们的语法是比较相似的,只不过C++提供了面向
    的头像 发表于 02-14 13:57 1684次阅读
    <b class='flag-5'>C</b>语言是怎么<b class='flag-5'>面向</b><b class='flag-5'>对象</b>编程

    面向过程面向对象的区别

    说起面向对象,大家可能会想到其他的,但是此对象非彼对象哈哈,不必惊慌,也特别好搞定。 在听到面向
    的头像 发表于 02-15 11:10 4201次阅读
    <b class='flag-5'>面向</b><b class='flag-5'>过程</b>与<b class='flag-5'>面向</b><b class='flag-5'>对象</b>的区别