c++面试题2

本文探讨了C++中的关键概念,包括空类的默认函数、函数模板的工作原理及其优势、STL的六大组件、重定义、重载与重写的区别、多态的类型及其条件、动态多态的问题与解决方法、宏函数与内联函数的差异。重点讲解了多态实现的条件,以及动态多态可能导致的内存泄漏问题和如何避免。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录​​​​​​​

一个空类有哪些函数?

函数模板是不是函数?什么时候会变成真正的函数呢?可以解决什么问题?

STL的组件有哪些?  6大组件

重定义(隐藏)、重载、重写(覆盖)的区别?

多态有几种?分别是什么?

实现动态多态的条件是什么:

有虚函数一定会触发多态吗?

动态多态存在的问题,如何去解决

宏函数与内联函数的区别:


  • 一个空类有哪些函数?

       不是一开始就有的 是创建对象后才会有的          

      默认构造函数、析构函数、拷贝构造函数、=赋值运算符、&运算符函数、&运算符函数 const

  • 函数模板是不是函数?什么时候会变成真正的函数呢?可以解决什么问题?

              1:不是函数,是模板,在内存中是不占空间的

              2:就是在使用的时候把真正的数据类型传进去的时候,才会变成一个真正的函数!这个真正的函数是系统根据我们给的具体的类型自动帮我们生成!

              变成真正的函数在内存中就占空间了!

             3:解决函数重载存在的代码冗余的问题!

  • STL的组件有哪些?  6大组件

        算法:  对容器中的数据进行操作

        容器:  保存数据

        迭代器:iterator 面向对象版本的指针,主要作用:访问容器中的数据

        分配器

        适配器

        函数对象(仿函数)

  • 重定义(隐藏)、重载、重写(覆盖)的区别?

        重载:必须在同一个作用域内,函数名相同,参数不同与返回值类型无关的一组函数,

        重定义:必须在继承关系中,子类重定义了父类的同名函数!子类的函数与父类的函数名字相同!

        重写: 必须在继承关系中,子类重写父类的虚函数!要求是函数的首部必须是一模一样的!(函数类型 函数名(参数列表)必须一样!)

  • 多态有几种?分别是什么?

        2种 静态多态和动态多态也叫动态绑定和静态绑定

        这两种多态有什么区别?

        链接的时刻是不一样的

         动态多态(动态绑定)

        调用一个函数,在运行阶段才能知道执行哪一个函数体!体现在继承、虚函数中!

        静态多态(静态绑定)

          调用一个函数,在编译阶段就能知道执行哪一个函数体!体现在函数重载、运算符重载

  • 实现动态多态的条件是什么:

  1.     必须有继承,一个父类,多个子类
  2. 父类中要有虚函数,子类要重写父类的虚函数
  3. 必须通过父类的引用或者是指针去操作子类对象,去调用虚函数的时候
  • 有虚函数一定会触发多态吗?

        不一定 必须同时满足桑条件 才会触发多态

  • 动态多态存在的问题,如何去解决

        创建子类对象 用父类指针去接受

        问题:如果在子类的构造函数中使用new的方式动态去分配空间,那么就需要在子类的析构函数中使用delete去做释放,没有执行子类的析构函数,就会造成内存泄露

        解决:是把父类的析构函数写成虚函数

        为什么不执行子类的析构函数,就会造成内存泄漏

        如果在子类的构造函数中使用new的方式动态去分配空间,那么就需要在子类的析构函数中使用 delete去做释放,没有执行子类的析构函数,就会造成内存泄露

        为什么在设计类的时候,建议把父类的析构函数写成虚析构函数

通过父类的指针去释放子类的对象,只执行父类的析构函数,并不会执行子类的析构函数,这样就会造成内存泄漏。

  • 宏函数与内联函数的区别:

          <1>本质是不一样,内联函数是函数;宏函数是宏,并不是函数!

          <2>传参:函数要什么类型的参数给什么类型的参数; 宏:不会进行类型检查,全部按文本的格式去处理!

          内联函数是对C语言中宏函数的优化!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值