C++和C的区别
- C是面向过程的语言,主要以函数为主;C++是面向对象的语言,主要以类为主。
- 动态管理内存的方式不一样。C采用malloc和free,C++采用new和delete。
- 标准输入输出流不一样。C采用scanf/printf,C++采用cin/cout。
- C不支持函数重载,C++支持函数重载。
- C没有引用,C++有引用。
C++和java的区别
- Java是完全的面向对象语言,C++兼容C,并不是完全的面向对象语言。
- Java提供自动的内存管理机制(比如垃圾回收机制)。
- Java没有指针。
- Java不支持多重继承,但支持继承多个接口(extends+implement)。
- Java不支持操作符重载。
-
class和Struct的区别
- 结构体没有默认的构造函数,但是可以添加构造函数, 类有默认的构造函数。
- 结构体没有析构函数, 类有析构函数。
- 结构体结构成员默认为Public,不能有protected修饰符;类的变量和常量数则默认位Private,不过其他类成员默认都是Public
- 结构体没有 abstract 和 sealed(因为不能继承),类可以使用 abstract 和 sealed。
- 结构体可以不使用new 初始化,类必须使用new 初始化。
-
Struct和Union的区别
- 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放一个被选中的成员, 而结构体则存放所有的成员变量。
- 对于共用体的不同成员赋值,将会对其他成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。
- 内存分配不同。union的大小为其内部所有变量的最大值,按照最大类型的倍数进行分配大小。struct 遵循公式1:前面的地址必须是后面的地址正数倍,不是就补齐。公式2:整个Struct的地址必须是最大字节的整数倍
-
new/delete和malloc/free的异同
- new/delete是C++的运算符,malloc/free是C/C++语言的标准库函数。
- new无需显式地指出所需内存的尺寸,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。
- new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。
- new不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free 也不会调用析构函数。
-
define 和const的区别
- 在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
- const在编译时确定其值,define在预处理阶段进行替换
- const有数据类型,编译时会进行类型检查;define 无类型,不进行类型安全检查,可能会产生意想不到的错误。
- 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