C++面试常见题目1_C++与C,Java的区别

C++和C的区别

  1. C是面向过程的语言,主要以函数为主;C++是面向对象的语言,主要以类为主。
  2. 动态管理内存的方式不一样。C采用mallocfree,C++采用newdelete
  3. 标准输入输出流不一样。C采用scanf/printf,C++采用cin/cout。
  4. C不支持函数重载,C++支持函数重载。
  5. C没有引用,C++有引用。

 

C++和java的区别

  1. Java是完全的面向对象语言,C++兼容C,并不是完全的面向对象语言。
  2. Java提供自动的内存管理机制(比如垃圾回收机制)。
  3. Java没有指针。
  4. Java不支持多重继承,但支持继承多个接口(extends+implement)。
  5. Java不支持操作符重载。

 

 

  • class和Struct的区别

  1. 结构体没有默认的构造函数,但是可以添加构造函数, 类有默认的构造函数。
  2. 结构体没有析构函数, 类有析构函数。
  3. 结构体结构成员默认为Public,不能有protected修饰符;类的变量和常量数则默认位Private,不过其他类成员默认都是Public
  4. 结构体没有 abstract 和 sealed(因为不能继承),类可以使用 abstract 和 sealed。
  5. 结构体可以不使用new 初始化,类必须使用new 初始化。
  • new/delete和malloc/free的异同

  1. new/delete是C++的运算符,malloc/free是C/C++语言的标准库函数。
  2. new无需显式地指出所需内存的尺寸,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。
  3. new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。
  4. new不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free 也不会调用析构函数。
  •  define 和const的区别

  1. 在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
  2. const在编译时确定其值,define在预处理阶段进行替换
  3. const有数据类型,编译时会进行类型检查;define 无类型,不进行类型安全检查,可能会产生意想不到的错误。
  4. define不分配内存,给出的是立即数,有多少次使用就进行多少次替换,在内存中会有多个拷贝,消耗内存大;
    const  在静态存储区中分配空间,在程序运行过程中内存中只有一个拷贝。

本系列文章目的为个人准备面试的简单总结,文中多有不足,敬请批评指正!

参考:

https://blog.csdn.net/bitboss/article/details/62884694

https://zhidao.baidu.com/question/2135937.html

https://blog.csdn.net/boyeer/article/details/53311049

https://www.cnblogs.com/maluning/p/7944231.html

https://blog.csdn.net/bat67/article/details/52022105

https://blog.csdn.net/yingyujianmo/article/details/51206460

http://www.cnblogs.com/QG-whz/p/5140930.html

猜你喜欢

转载自blog.csdn.net/zzhang_12/article/details/80991146