c++⾯试、复试常⽤问题总结
c++⾯试、复试常⽤问题总结
C++重载:
为什么c++⽀持重载函数:因为c++编译器在命名时候做了相对于C的改变,记录下了参数列表等信息确保了不重名,所以⽀持重载。(本质是参数列表不同)
三⼤特性:
1. 封装:为了将代码模块化,隐藏细节,⽅便使⽤
2. 多态:实现接⼝的复⽤性
3. 继承:代码的复⽤性
4. 抽象
5. 对象
C++默认是私有的,public,private,protected这些操作符的使⽤体现了封装特性
析构函数
1. 构造函数名字加上~
2. 没有参数,没有返回值
3. ⼀个类有且仅有⼀个析构函数,如果没实现,则默认系统⾃带的析构函数(指针的时候必须⾃⼰实现)。
4. 系统⾃⼰调⽤析构函数
5. 析构函数并不是删除对象的操作,⽽是做⼀些清理⼯作
赋值操作符重载:
1. ⽬的:增强代码的可读性。
2. 不可以重载的5个运算符:
.* :: sizeof ?:(三⽬运算法) .成员访问->
Const函数修饰
1. Const修饰this指针所指向的内容,保证了这个对象在函数内部是不会改变的
2. Const+对象
可以调⽤const成员函数,但是不能调⽤⾮const成员函数
⾮const对象两者都可以调⽤
3. Const+成员函数
可以调⽤其他const成员函数,但是不能调⽤其他的⾮const成员函数。
⾮const成员函数两者均可以调⽤
Inline内联函数
1. 特点:对于编译来说,内联函数知识提供建议,编译器会根据实际需要选择是否设置为内联函数
2. 编译期间只会在使⽤内联函数的地⽅展开,没有压栈的开销(空间换取时间)
3. 定义在类内的内部成员函数默认定义为内联函数
4. Inline必须和函数的定义放在⼀起,仅仅声明⽆效。
5. 当代码题较长,不适⽤内联函数
C++中建议⽤const/ enum /inline代替宏?
1. 宏有其优点,增强了代码的复⽤性,提⾼了性能
2. 但是代码的可读性差,可维护性差,⼀个域中不能多次使⽤。⽽且调试不⽅便,再开始预处理时候就已经替换了宏函数
Class与struct
默认的访问权限不同、默认的继承⽅式(c++中struct也可以继承)不同,class可以⽤模板参数。
指针和引⽤:;
1. 区别:引⽤仅仅是别名,但是指针存的是变量的地址,两个不同的空间,指针是可以改变的,指针可以为空,并且可以加const修饰。
引⽤可以不⽤解*指针,直接使⽤。
Sizeof(引⽤)=变量的⼤⼩ sizeof(指针),表⽰的是指针的⼤⼩。
引⽤能⽤不⼀定消耗内存空间,底层实现是⼀样的,但是指针需要占⽤内存空间。
动态内存管理
1. C语⾔中使⽤malloc free管理内存
2. C++使⽤new delete管理,new delete除了分配空间,还会调⽤构造函数和析构函数进⾏初始化和清理。 Malloc失败了返回0,new
失败了会抛出异常。
3. 内存泄漏:动态开辟的内存的空间没有释放,(new没有delete 没有调⽤析构函数)
enum函数拷贝
1. 浅拷贝:在拷贝构造函数直接将原地址内容给拷贝对象,两个对象共同赋予同⼀地址空间,对原内容发⽣改变,就会影响现在的内容
2. 深拷贝:开辟和源空间相同⼤⼩的空间,并且拷贝内容,在拷贝内容,(后⾯两者的空间独⽴操作)。
虚函数:即在类的成员函数前⾯加上virtual
1. 纯虚函数:是为了继承改写的函数,含有纯虚函数的类就是抽象类,,这个类并不能实例化对象。
2. 只有类的成员函数才能定义成虚函数,基类定义的虚函数在派⽣类中该函数仍然保留这虚函数属性,可以被重载。
3. 重载:函数名相同,参数列表不同,返回值可相同可不同
重写:在不同的作⽤域内,且基类必须有虚函数定义,其他参数均相同。
重定义:在不同的作⽤域内函数名相同
多态:1虚函数的重写,基函数有virtual字段修辞
2⽗类的指针或者引⽤
为什么基类的析构函数要定义为虚函数?
防⽌只析构了基类⽽不析构派⽣类的状况发⽣! 在public继承中,基类对于派⽣类的对象进⾏操作,只
可以影响到继承下来的成员,当然析构函数也不例外,如果基类想对于派⽣类的⾮继承成员进⾏操作,就必须把基类的函数定义为虚函数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论