面试常见问答之C++

  1. 编程语言C、C++、C#、Java、PHP、Python、MATLAB对比。
      C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
        ⋄ \diamond 优点:广泛性、简洁性、结构完善。
        ⋄ \diamond 缺点:数据的封装性弱;
           语法限制不太严格,对变量的类型约束不严格。
        ⋄ \diamond 用途:一般只用于嵌入式硬件开发。
      C++ 是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
        ⋄ \diamond 优点:支持数据封装和数据隐藏、支持继承和重用、支持多态性;
           代码可读性好、可重用性好、可移植、运行效率高,高效安全。
        ⋄ \diamond 缺点:相对Java来说,没有垃圾回收机制,可能引起内存泄露。
        ⋄ \diamond 用途:主要用于后台服务和桌面软件及游戏开发。
      C# 是由C和C++衍生出来的一种安全的、稳定的、简单的、优雅的面向对象编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。
        ⋄ \diamond 优点:强大的.Net Framework托管代码集合类;
           较简单的语言特性;
           Web应用程序开发速度快性;
           代码可读性好、可重用性好、可移植、运行效率高,高效安全。
        ⋄ \diamond 缺点:不适用于编写时间急迫或性能非常高的代;
           缺乏性能极高的应用程序所需要的关键功能
        ⋄ \diamond 用途:网站、后台服务、桌面软件。
      Java 是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
        ⋄ \diamond 优点:简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性。
        ⋄ \diamond 缺点:占用大量的内存,启动时间较长,不直接支持硬件级别的处理。
        ⋄ \diamond 用途:网站、后台服务、安卓。
      PHP 即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己。PHP同时支持面向对象和面向过程的开发,使用上非常灵活。
        ⋄ \diamond 优点:开源免费、快捷高效、性能提升、跨平台。
        ⋄ \diamond 缺点:函数命名不规范、单线程、核心异步网络不支持。
        ⋄ \diamond 用途:web网站开发。
      Python 是一种脚本语言,提供了高效的高级数据结构,还能简单有效地面向对象编程。
        ⋄ \diamond 优点:简单、易学、易读、易维护、用途广泛、速度快、免费、开源、可移植性、解释性。
        ⋄ \diamond 缺点:运行速度低于编译型语言,在移动计算领域乏力。
        ⋄ \diamond 用途:爬虫,Web开发,视频游戏开发,桌面GUIs(即图形用户页面),软件开发,架构等。
      MATLAB 是一套功能强大的工程计算软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。
        ⋄ \diamond 优点:编程效率高、高效方便的矩阵和数组运算。
        ⋄ \diamond 缺点:循环运算效率低、封装性不好。
        ⋄ \diamond 用途:用于算法开发、数据分析、可视化和数值计算的程序设计环境。

  2. 面向对象和面向过程的区别。
      面向过程: 面向过程是“自上而下”的设计语言,先定好框架,再增砖添瓦,也叫结构化编程。通俗点,就是先定好main()函数,然后再逐步实现mian()函数中所要用到的其他方法。
      面向对象: 把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。面向对象顾名思义就是把现实中的事务都抽象成为程序设计中的“对象”,其基本思想是一切皆对象,是一种“自下而上”的设计语言,先设计组件,再完成拼装。

  3. C和C++的区别。
      C是面向过程的语言,C++是面向对象的语言,C++有封装、继承和多态的特性;
      C和C++内存管理的方法不一样,C使用malloc/free,C++除此之外还用new/delete;
      C++中还有函数重载和引用的概念,而C中没有。

  4. 封装、继承和多态。
      封装隐藏了对象的属性和实现细节,使得代码模块化;
      继承通过子类继承父类的方法和属性,实现了代码重用;
      多态则是“一个接口,多个实现”,通过子类重写父类的虚函数,实现了接口重用。

  5. malloc和new的区别。
      malloc/free是标准库函数,new/delete是C++运算符。
      malloc失败返回NULL,new失败抛异常。
      new/delete会调用构造、析构函数,malloc/free不会,所以他们无法满足动态对象的要求。
      new返回有类型的指针,malloc返回无类型的指针。
      malloc申请的内存在堆上,使用free释放;new申请的内存在自由存储区,用delete释放。
      C++允许重载new/delete操作符;而malloc不允许重载。

  6. 有了malloc/free为什么还要new/delete?
      new运算不需要进行强制类型转换,使用简单方便;
      new运算是通过调用构造函数初始化动态创建的对象,执行效率更高;
      使用new能够进行异常处理,使用更安全。

  7. 指针引用的异同点。
      相同点: 指针与引用类似,都可以实现对其它对象的间接访问。
      不同点: 1. 指针是一个变量的地址;引用是一个变量的别名。
           2. 指针是一个对象,可以有自己的存储空间;引用本身并非一个对象,只有名字,没有自己的存储空间。
           3. 指针可以是空值,不必初始化;引用不可以为空,当被创建的时候,必须初始化。
           4. 指针的值在初始化后可以改变,即指向其它的存储单元;引用的值在进行初始化后就不可以再改变了,本质上为指针常量。

  8. const修饰指针的情况。
    const修饰指针 —— 常量指针。
    ⋄ \diamond 特点:指针的指向可以修改,但指针指向的值不可以修改。
    const修饰常量 —— 指针常量。
    ⋄ \diamond 特点:指针的指向不可以修改,但指针指向的值可以修改。
    const既修饰指针,又修饰常量。
    ⋄ \diamond 特点:指针的指向和指针指向的值都不可以更改。

  9. 指针和引用的参数传递区别。
      指针传递参数的本质是值传递 ,它所传递的是一个地址值。指针变量的值就是地址,把地址当作值传递,通过在地址上做解引用操作,就能修改相应变量的值。
      引用传递参数的本质是地址传递,引用传递中形参变量可以看作是实参变量的别名,因此形参可以修饰实参。

  10. 值传递和地址传递。
       如果不想修改实参,就用值传递;如果想修改实参,就用地址传递。
        ⋄ \diamond 值传递:

    在这里插入图片描述
        ⋄ \diamond 地址传递:

    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值