C与C++的区别
黄舟
黄舟 2017-04-17 13:02:28
0
8
875

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

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

class animal { virtual void speak(); } class dog:public animal { void speak() { cout<<"旺旺"<speak()//这个时候输出旺旺

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

reply all (8)
洪涛

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


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

    PHPzhong

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

      巴扎黑

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

        迷茫

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

          左手右手慢动作

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

            左手右手慢动作

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

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

              Peter_Zhu

              一个接口,多种实现

                洪涛

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

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

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

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

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

                  Latest Downloads
                  More>
                  Web Effects
                  Website Source Code
                  Website Materials
                  Front End Template
                  About us Disclaimer Sitemap
                  php.cn:Public welfare online PHP training,Help PHP learners grow quickly!