1.C与C++的区别
① C是面向过程的语言,而C++是面向对象的语言。
② C和C++动态管理内存的方法不一样,C是使用malloc、free函数,而C++不仅有malloc/free,还有new/delete关键字。
③ C中的struct和C++的类,C++的类是C中没有的,C中的struct可以在C++中等同类来使用,struct和类的差别是,struct的成员默认访问修饰符是public,而类默认是private。
④ C++支持重载,而C不支持重载,C++支持重载在于C++名字的修饰符与C不同,例如在C++中函数 int f(int) 经过名字修饰之后变为_f_int,而C是_f,所以C++才会支持不同的参数调用不同的函数。
⑤ C++中有引用,而C没有。
⑥ C++全部变量的默认连接属性是外连接,而C是内连接。
⑦ C中用const修饰的变量不可以用在定义数组时的大小,但是C++用const修饰的变量可以。(如果不进行&,解引用的操作的话,是存放在符号表的,不开辟内存)
⑧ C++有很多特有的输入输出流。
2.深拷贝和浅拷贝的区别
1)在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据成员中没有指针时,浅拷贝是可行的;但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象,所以,此时,必须采用深拷贝。 2)深拷贝与浅拷贝的区别就在于深拷贝会在堆内存中另外申请空间来储存数据,从而也就解决了指针悬挂的问题。简而言之,当数据成员中有指针时,必须要用深拷贝。
3.指针和引用的区别
①、指针有自己的一块空间,而引用只是一个别名。
②、使用sizeof查看一个指针大小为4(32位),而引用的大小是被引用对象的大小。
③、指针可以是NULL,而引用必须被初始化且必须是对一个以初始化对象的引用。
④、作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象。
⑤、指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能被修改。
⑥、指针可以有多级指针(**p),而引用只有一级。
⑦、指针和引用使用++运算符的意义不一样。
4.什么是面向对象,面向对象的三大特征是什么?
面向对象:面向对象是一种对现实世界的理解和抽象的方法、思想,通过将需求要素转化为对象进行问题处理的一种思想。
面向对象的三个基本特征是:封装、继承、多态。
5.static关键字的用法
①静态全局变量
未初试化的话会被自动初始化为0;
静态全局变量在全局数据区分配内存;
静态全局变量在作用域是在本文件内,所以在其他文件中无法被使用
② 静态局部变量
静态局部变量在全局数据区分配内存;
静态局部变量只会被初始化一次(如果没有显示初始化也会被初始化为0);
其作用域外无法使用,但是程序再次进入其作用域其值是上次退出时保持的值
③静态函数
函数返回值类型前加上static关键字之后就被定义为了静态函数。
其特点只有一点,其
作用域就是本文件,在其他文件中不可见(无法使用它,如果重名也不会产生冲突)
④类的静态数据成员
类的静态数据成员也是放在全局数据区;
为类的所有对象共有,实际上在对象产生之前类的静态数据成员就存在了。
类的静态数据成员有两种访问形式:<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>
静态数据成员不会和程序中的其他全局变量名字冲突。
⑤类的静态函数成员
类的静态函数成员和类的静态数据成员一样都是类的一部分,不属于某一个对象;
类的静态函数成员无法访问类的某个对象的非静态数据成员和非静态函数成员。
类的非静态函数成员可以访问类的静态数据和静态函数;
如果在类体外定义函数的话,就不能指定static了。