c++面试必问20题

  1. 引用为什么不能修改引用关系?
  2. 什么是重载
  3. this指针如何在类中出现的?

类中的函数存放在代码区,所有对象访问的成员函数都是同一份代码,当不同对象调用同一个成员函数时,通过this区分在成员函数内修改的是哪个对象的成员变量

  1. this指针是否可以修改?

不可以,如果修改了this就无法在函数内区分修改的是哪个对象的成员变量了

  1. this指针主要起到什么作用?this指针是否占用对象内存?

用来分区分成员变量属于哪个对象的,区分参数和成员变量

  1. 构造函数特点,析构函数特点?

析构函数是释放成员变量指向的堆区内存

  1. 编译器会给类自动生成哪几个函数?

构造 析构 浅拷贝 赋值运算符

  1. 什么时候会调用拷贝构造

用已经存在的对象初始化新对象的时候

当参数或返回值以值的形式返回的时候

返回值以值的形式返回是一个右值

如果想让返回值以左值的形式返回,返回值应该为引用类型

  1. 拷贝构造的参数是什么?为什么?

引用:避免无限递归

万能引用:能接收左值也能接收右值,保护参数不被修改

  1. 深拷贝和浅拷贝的区别

浅拷贝是简单的赋值操作,浅拷贝会造成同一块内存多次释放,其中一个对象修改这块内存的数据另一个对象也随着修改

深拷贝会拷贝一份相同大小的内存,并且值也相同

  1. 常函数特点?

首先常函数中的this 和非常函数的this不同,常函数的this *左 和 *右都被const修饰了(但是有的编译器不同,面试官问的话就说在vs上自己看的),所以常函数不能修改成员变量,常函数不能调用非常函数,因为非常函数的this 只有*的右边被const修饰了类型不匹配。

  1. 常函数为什么不能修改成员变量?
  2. 常函数为什么不能调用非常成员函数?

  1. 静态成员函数有哪些特点?

 常函数能调用静态成员函数,因为静态成员函数没有this,所以不能调用非静态成员变量,也不能调用非静态成员函数(因为没办法给隐含参数this传值),可以通过对象或者类名调用公有的静态成员函数                                                                                                                                                                           

  1. 空指针可以调用成员函数吗?什么情况下不可以调用成员函数?

可以,成员函数里面访问成员变量时不能调用

  1. 简述下多态?以及动态多态的调用流程。

多态分为:静态多态和动态多态,静态多态:在编译期间就可以确定的多态例如函数重载和运算符重载和模板,函数重载在编译期间通过实参的类型能确定调用哪个函数。

动态多态:在运行期间确定的多态,父类指针或引用指向子类对象,在通过父类指针调用虚函数的时候,父类指针会通过对象里面的虚表指针找到虚表,然后在虚表中确定虚函数的地址进行调用。

  1. 虚表指针在什么时候被创建,虚标会占用对象内存吗?

创建对象的时候,在构造函数中被赋值,虚表在编译阶段被创建所有对象共享同一份虚标,虚表不占对象的内存,虚表指针会占用函数的内存。

  1. 什么时候使用虚析构?

一般在继承的时候使用虚析构,因为继承了就有可能会发生父类指针指向子类对象

  1. 什么是重写 覆盖 和隐藏

重写和覆盖是一个内容:首先在继承关系中父类函数是虚函数,子类中的返回值相同名字相同参数相同的函数 重写父类的虚函数也叫覆盖。

在父类和子类中不是重写就是隐藏

  1. 多继承时容易出现什么问题?怎么解决?

会出现二义性问题,往往使用作用域解决,菱形继承还可以使用虚继承解决

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值