面向过程与面向对象
C语言是面向过程的语言,关注的是解决问题的过程与方法。 C++可以说是C语言的延伸与发展,不仅继承了C的一些优势,而且还多了一样非常重要的东西——面向对象。
那面向过程和面向对象有什么区别呢? 这里我拿外卖产业简单举个例子。
我们知道,外卖产业需要四方的支持才能产生:顾客、商家、骑手、平台。 面向过程就类似研究如何实现这一过程的每个步骤的运转成立。 先让顾客下单,平台处理向骑手发布任务,骑手接单到商家取餐,最后送至顾客。它考虑的是每一个过程的如何实现。
面向对象是分模块来完成,顾客、平台、商家、骑手四个模块,分别干什么,让他们各自处理各自的事情,是以对象为基准来实现运转。
如果从程序的实现角度来说,C语言这种面向过程的就必须要将每一方的行动做成函数,逐一实现
面向过程则可以将每一方封装起来,不管是他的信息还是行为,都可以全部装到一起,没必要一个动作一个动作写成函数再调用,可以全部放到一个类下面。
意思就是,C++的结构下,可以将信息(如:人的年龄、性别等变量)和动作(函数)放到一个类下,这是C语言做不到的。
以学生、老师开学报到为例(C语言实现方法):
struct stu
{
char name[20];
int age;
char ID[19];
//...
};
struct teacher
{
int name;
int age;
char ID[19];
//...
};
void StuReturnSchool(struct stu* ps)
{
//...
}
void TeaReturnSchool(struct teacher* pt)
{
//...
}
void StuRegisterSchool(struct stu* ps)
{
//...
}
void TeaRegisterSchool(struct teacher* pt)
{
//...
}
如果是C语言,就需要先定义老师和学生的结构体,将信息放到里面,再分别调用函数实现报到返校动作。
但是这样其实挺麻烦,比如要制做这样一个报到返校的网页,这种写法需要额外制作一些多余的按钮:学生登录、老师登录;学生报到、老师报到.......明明只需要一个按钮,登录、报到就可以了,点进去以后学生归学生类,老师归老师类。
如果还有教辅人员等那就更麻烦了,还需要设其他额外入口,这样入口一下就设置了好几个,并且写代码调用的时候也很麻烦,不论是需要记得定义的函数名,或者是相类似接口的重复定义都是问题。
因此,面向对象的优势此时就被体现出来了。
我们可以将老师作为一个整体封装到一个类下面。里面不仅存老师的信息,也存老师的登录、报到等一系列动作的函数接口。这样就方便很多了,而且看上去也是一目了然。
class stu
{
char name[20];
int age;
char ID[19];
//...
void StuReturnSchool(stu* ps)
{
}
void StuRegisterSchool(stu* ps)
{
}
};
class teacher
{
int name;
int age;
char ID[19];
//...
void TeaReturnSchool(teacher* pt)
{
}
void TeaRegisterSchool(teacher* pt)
{
}
};
一个人是谁、要干什么都在一个集合里面,非常清楚,这也是面向对象的一个优势。