C与C++的区别

浏览:33日期:2023-06-01

问题描述

今天面试同样被问到的一个问题,C与C++的区别.我的回答如下:C是面向过程,C++是面向对象。C++里有函数重载,C中没有函数重载。C++是面向对象的,有重载 继承 多态三种特性

然后面试官问我多态的用处,坦率的讲我所理解的多态如下:

class animal{ virtual void speak(); }class dog:public animal{ void speak() {cout<<'旺旺'<<endl; }}我所理解的多态就是dog d;animal *ptr=&d;ptr->speak()//这个时候输出旺旺

面试时我说多态是比如基类指针指向子类对象,调用基类virtual函数时实际调用子类覆盖的虚函数。然后面试官问,有没有一种情况下,没有多态的话你就实现不了某种功能的情况呢?坦率的讲,对于多态我真的只有上面的一点肤浅的理解,我先搜搜相关内容,欢迎各位在此讨论,问题已加粗。

问题解答

回答1:

google搜下便有答案: https://www.quora.com/Whats-the-difference-between-C-and-C++

对于第二个问题: 如果多态指的是技术,答案是没有,因为从技术上看,面向对象只是面向过程的语法糖;如果指思想,答案是有,没有多态的思想,许多接口设计会寸步难行。

回答2:

面向对象三个基本特征:封装,继承,多态。多态性相对于前二者而言是最灵活的,也是面向对象比较核心的部分。但针对面试官的问题:没有多态就不能实现某种功能的情况,答案是否定的。很多重要的系统及应用,考虑到性能及开发流程,使用机构化语言(C)的更多。只能说,使用了多态,能让某些功能的实现看起来更“优雅”。当年C++的作者劝说UNIX的作者用C++编写系统时,后者只是微笑沉默拒绝。这其中有自己的哲学。

回答3:

最后一个问题,估计是想让你用c来模拟多态,大体的思路是,使用结构体+函数指针来模拟类,使用工厂函数来给函数指针赋值,最后通过使用结构体.成员函数的来触发调用,完成多态的实现方式。

回答4:

C 与 C++ 的真正区别在哪里?一些区别: C: 编写C代码,写出来的是C代码。 C++:编写C++代码,写出来的是还是C代码。http://www.zhihu.com/question... (分享自知乎网)

回答5:

你说的是面向过程和面向对象的区别,而不是c和c++的区别。。。建议: effective c++

回答6:

抖个机灵。世界上没有实现不了的事情。如果有,就*。

世界上没有指针实现不了的事情。如果有,就指向指针的指针。

回答7:

一个接口,多种实现

回答8:

@techfellow UNIX哲学思想KISS: Keep It Simple, Stupid. 也就是道家里面的'大道至简'.

程序=算法+数据结构在过程式编程中,函数体现为算法,拿'奔跑吧兄弟'来说:'兄弟'作为参数是输入,'奔跑'作为过程是算法.C中可以用结构体(数据结构)对参数进行封装后传入函数(算法)操作.也就是说,过程式强调的是'奔跑'的算法.面向对象强调的是'兄弟',而'奔跑'则只是一个动作.

面向对象三要素:封装,继承+多态.封装是为了'去除全局变量'.继承是为了'去除代码重复'.多态是为了能让'继承'成立.

多态体现在方法重写和方法重载.方法重写:是子类的方法覆盖父类的方法,要求方法名和参数都相同.方法重载:是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数.

问:有没有一种情况下,没有多态的话你就实现不了某种功能的情况呢?答:在继承的前提下,在你需要方法重写或重载的时候。比如你有一个 汽车类 作为父类,类中有 启动引擎 的方法,内燃机汽车 和 燃料电池汽车 都继承了汽车这个类,因为发动机工作原理各有不同,显然需要重写 启动引擎 这个方法。

相关文章: