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 没有调用析构函数)

拷贝

  1. 浅拷贝:在拷贝构造函数直接将原地址内容给拷贝对象,两个对象共同赋予同一地址空间,对原内容发生改变,就会影响现在的内容
  2. 深拷贝:开辟和源空间相同大小的空间,并且拷贝内容,在拷贝内容,(后面两者的空间独立操作)。

虚函数:即在类的成员函数前面加上virtual

  1. 纯虚函数:是为了继承改写的函数,含有纯虚函数的类就是抽象类,,这个类并不能实例化对象。
  2. 只有类的成员函数才能定义成虚函数,基类定义的虚函数在派生类中该函数仍然保留这虚函数属性,可以被重载。
  3. 重载:函数名相同,参数列表不同,返回值可相同可不同
    重写:在不同的作用域内,且基类必须有虚函数定义,其他参数均相同。
    重定义:在不同的作用域内函数名相同

多态:1虚函数的重写 ,基函数有virtual字段修辞

 2父类的指针或者引用

为什么基类的析构函数要定义为虚函数?

防止只析构了基类而不析构派生类的状况发生! 在public继承中,基类对于派生类的对象进行操作,只可以影响到继承下来的成员,当然析构函数也不例外,如果基类想对于派生类的非继承成员进行操作,就必须把基类的函数定义为虚函数。

  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值