- 引用为什么不能修改引用关系?
- 什么是重载
- this指针如何在类中出现的?
类中的函数存放在代码区,所有对象访问的成员函数都是同一份代码,当不同对象调用同一个成员函数时,通过this区分在成员函数内修改的是哪个对象的成员变量
- this指针是否可以修改?
不可以,如果修改了this就无法在函数内区分修改的是哪个对象的成员变量了
- this指针主要起到什么作用?this指针是否占用对象内存?
用来分区分成员变量属于哪个对象的,区分参数和成员变量
- 构造函数特点,析构函数特点?
析构函数是释放成员变量指向的堆区内存
- 编译器会给类自动生成哪几个函数?
构造 析构 浅拷贝 赋值运算符
- 什么时候会调用拷贝构造
用已经存在的对象初始化新对象的时候
当参数或返回值以值的形式返回的时候
返回值以值的形式返回是一个右值
如果想让返回值以左值的形式返回,返回值应该为引用类型
- 拷贝构造的参数是什么?为什么?
引用:避免无限递归
万能引用:能接收左值也能接收右值,保护参数不被修改
- 深拷贝和浅拷贝的区别
浅拷贝是简单的赋值操作,浅拷贝会造成同一块内存多次释放,其中一个对象修改这块内存的数据另一个对象也随着修改
深拷贝会拷贝一份相同大小的内存,并且值也相同
- 常函数特点?
首先常函数中的this 和非常函数的this不同,常函数的this *左 和 *右都被const修饰了(但是有的编译器不同,面试官问的话就说在vs上自己看的),所以常函数不能修改成员变量,常函数不能调用非常函数,因为非常函数的this 只有*的右边被const修饰了类型不匹配。
- 常函数为什么不能修改成员变量?
- 常函数为什么不能调用非常成员函数?
- 静态成员函数有哪些特点?
常函数能调用静态成员函数,因为静态成员函数没有this,所以不能调用非静态成员变量,也不能调用非静态成员函数(因为没办法给隐含参数this传值),可以通过对象或者类名调用公有的静态成员函数
- 空指针可以调用成员函数吗?什么情况下不可以调用成员函数?
可以,成员函数里面访问成员变量时不能调用
- 简述下多态?以及动态多态的调用流程。
多态分为:静态多态和动态多态,静态多态:在编译期间就可以确定的多态例如函数重载和运算符重载和模板,函数重载在编译期间通过实参的类型能确定调用哪个函数。
动态多态:在运行期间确定的多态,父类指针或引用指向子类对象,在通过父类指针调用虚函数的时候,父类指针会通过对象里面的虚表指针找到虚表,然后在虚表中确定虚函数的地址进行调用。
- 虚表指针在什么时候被创建,虚标会占用对象内存吗?
创建对象的时候,在构造函数中被赋值,虚表在编译阶段被创建所有对象共享同一份虚标,虚表不占对象的内存,虚表指针会占用函数的内存。
- 什么时候使用虚析构?
一般在继承的时候使用虚析构,因为继承了就有可能会发生父类指针指向子类对象
- 什么是重写 覆盖 和隐藏
重写和覆盖是一个内容:首先在继承关系中父类函数是虚函数,子类中的返回值相同名字相同参数相同的函数 重写父类的虚函数也叫覆盖。
在父类和子类中不是重写就是隐藏
- 多继承时容易出现什么问题?怎么解决?
会出现二义性问题,往往使用作用域解决,菱形继承还可以使用虚继承解决
标签:必问,20,函数,对象,成员,多态,c++,调用,指针 From: https://blog.csdn.net/liiiiiiiiii123/article/details/136719637