在学习C、C++以来,一直是在使用它们来编程,却从没有去仔细的考虑过他们的基本的思想,突然被问到面向对象、面向过程的时候,就会有一些吞吞吐吐,模棱两可(这都不知道,还好意思说自己会C、C++??面试官:好了下一位。),所以现在要用自己的语言去说明自己的看法。
一、面向对象(OOP)和面向过程
1.面向对象和面向过程是什么
C语言是面向过程语言,C++是面向对象语言,而这两个究竟是什么呢?
计算机语言是用来解决实际生活中的问题的,而问题的解决方法又有很多种。
(1)对于C语言而言,面对一个问题,它总是要分析解决这个问题需要哪些步骤(即分析了问题的过程),然后通过函数去一步一步的将这些步骤实现出来,最后挨个调用这些函数去解决这个问题,这就是面向过程,是一种底层思维。
(2)C++就不一样了,我觉得C++教会我的是如果把问题分解成一个个小问题,然后通过这些小问题解决方法的相互耦合去解决大问题。也就是说,当面对一个问题时,先把问题本身分解为各个小部分(对象),对于每一部分我们来设定该部分的实现方案,也就是说只需要完成该部分特定的行为,通过各对象完成本职工作或者对象间的协调配合去完成整个任务。这就是面向对象,是一种上层思维。
2.为什么要有面向对象和面向过程呢
存在即合理,他们一定有各自的优劣势呀!
(摘抄)
面向过程:
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能时最重要的因素。缺点:没有面向对象易维护、易复用、易扩展。
面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。(三大基本特征:封装、继承、多态)缺点:性能比面向过程低。
区别:
(1)出发点不同
(2)层次逻辑关系不同
(3)数据处理方式与控制程序不同
(4)分析设计与编码转换方式不同
3.怎么用呢?
我觉得怎么使用这个问题的回答是无法被回答出来的,因为对于一种方法,只有在自己的实践过程中慢慢去悟出来的。我也要从日常的学习中去领悟面向对象、面向过程的真正意义。
二、C、C++的区别和联系
联系:
C++是C的超集,兼容大部分C的语法的结构
(应该算是一种血缘关系了吧,个人认为,把C学好了入门其他高级语言就会容易很多,切记勿在浮沙筑高台!!!!)
常见问法知识:
1.面向对象、面向过程
2.动态内存管理(new/delete,malloc/free)
3.C的struct、c++的class
4.引用和指针的区别
5.等等等
区别简直太多了,这些也都是面试常见问题,慢慢整理,慢慢补充吧。
继续加油吧!