1.C++的三大特性
封装:使代码模块化。把属性和方法放到同一个类中,把方法的实现封装到类的成员函数的实现中,隐藏对象的属性和实现细节,仅仅对外提供接口和方法。
继承:减少代码的重复,提供程序的可阅读性,方便功能的添加。新的类与已有类有相同的属性和方法,可以通过继承得到已有的属性和方法。
多态:提高了代码的可复用性,同一种操作作用于不同的对象,产生不同的行为。
2.多态怎么实现的?
多态的条件:有继承关系,基类的多态函数必须声明为虚函数,派生类必须重写基类的函数,通过基类指针或引用调用虚函数。
3.深拷贝和浅拷贝?
浅拷贝:默认生成的拷贝构造函数就是浅拷贝,只拷贝类的成员对应的存储空间,不会拷贝类中成员再开辟的存储空间
深拷贝:拷贝成员函数的同时,连同成员对应的存储空间一同拷贝
4.重载、覆盖、隐藏
重载:同一个类,函数名一致,参数列表不同,返回值不做要求,可以有virtual关键字
覆盖(重写):基类和派生类中的两个成员函数,函数名相同,参数相同,基类必须有virtual关键字
隐藏:在继承关系中,将基类的同名函数的实现重新修改了。两种情况,一种函数名字相同,参数列表相同,函数的实现不同,基类没有virtual关键字。一种函数名字相同,参数列表不同,基类中virtual不做要求。
5.C++中static的作用
静态局部变量:生存周期到程序结束,只初始化一次,再次调用会保持上次离开的值。
静态全局变量:作用域只在本文件中。
静态成员变量:不属于对象的属性,整个类的属性,多个变量共用同一个成员,类的内部是声明,要在类的外部初始化,通常像计数等统计类的成员使用
静态成员函数:不属于任何对象,可以直接通过类名调用,没有this指针,只能访问静态成员变量
6.C++中虚函数的作用
C++中虚函数的作用主要是实现多态,在基类中声明一个虚函数,在派生类中对其重写。基类的引用或者指针指向一个派生类对象,当基类变量调用该函数时候,会自动调用派生类的对象
7.malloc和new的区别
属性的区别:malloc是c语言库函数,new是c++的运算符。使用malloc,需要包含相应的头文件,使用new不需要任何前置操作,只需要编译器支持即可。
使用上的区别:malloc申请空间需要显式填入申请内存的大小;new无需显示填入申请的内存大小,会根据new的类型分配内存。
内存位置的区别:malloc申请的内存是在堆空间;new分配的内存空间是在自由存储区。
返回类型的区别:malloc内存分配成功返回void*,需要通过强制类型转换转换为需要的类型;new返回对象类型的指针。
8.指针和引用的区别
指针是一个变量,这个变量存储的是一个地址,指向内存的一个存储单元,指针是一个实体;引用跟原来的变量实质上是同一个东西,是原变量的一个别名。
指针的值可以为空,引用的值不能为NULL,引用在定义的时候必须初始化
指针的值初始化后可以改变,指向其它的存储单元;引用在初始化后就不会改变了,从一而终。
指针可以有多级,引用只能是一级。
sizeof引用得到的是所指向的变量大小,sizeof指针得到的是指针本身的大小
9.const修饰成员变量函数会怎样?
类的成员变量不能被修改