C++常见面试考点及回答01

本文详细介绍了C++面试中常见的考点,包括虚函数的原理与应用、野指针和悬空指针的区别、C++的重载、重写和隐藏、构造函数种类、浅拷贝与深拷贝、访问权限、内存管理(new/malloc)以及形参和实参的区别。
摘要由CSDN通过智能技术生成

C++常见面试考点及回答(01)

1、虚函数virtual:

void *vptr; //虚函数表指针占内存

多态的产生:

1、程序中既存在父类也存在子类,父类中必须含义虚函数,子类中也必须重写父类中的虚函数

2、父类指针指向子类对象,或者父类引用绑定(指向)子类对象

3、当通过父类的指针或引用,调用子类中重写的虚函数时,就能看出多态性的表现了

2、野指针和悬空指针

共同点:野指针与悬空指针都是指向无效内存区域

产生的原因与解决办法:

野指针:指针变量未及时初始化=》定义指针变量时应及时初始化,或者置空

悬空指针:指针free或者delete之后没有及时置空=》释放指针操作后应立即置空

3、C++中的重载、重写和隐藏的区别

1)重载:同一范围内定义的同名函数才存在重载关系,主要特点是函数名相同,参数类型和个数不同,不能依靠返回值不同来区分同名函数

2)重写:在派生类中覆盖基类中的同名函数,重写函数体,同时要求基类函数必须是虚函数,且重写的函数必须与基类的虚函数有相同的参数个数、参数类型以及返回值类型

3)隐藏:在某些情况下,派生类中的函数屏蔽了基类中的同名函数,和重写的区别在于基类函数是否是虚函数

4、C++有哪几种构造函数

1)默认构造函数

2)初始化构造函数

3)拷贝构造函数

4)移动构造函数

5)委托构造函数

6)转换构造函数

5、浅拷贝与深拷贝的区别

浅拷贝:只是拷贝一个指针,并没有新开辟一个地址,拷贝的指针和原来的指针指向同一块地址,如果原来的指针所指向的资源释放了,那么再释放浅拷贝的指针的资源就会出现错误

深拷贝:深拷⻉不仅拷⻉值,还开辟出⼀块新的空间⽤来存放新的值,即使原先的对象被析构掉同时释放内存了,也不会影响到深拷⻉得到的值。在⾃⼰实现拷⻉赋值的时候,如果有指针变量的话是需要⾃⼰实现深拷⻉的。

6、public,protected和private访问和继承权限的区别

1、public的变量和函数在类的内部外部都可以访问,public继承的特点是基类的公有成员和保护成员作为派⽣类的成员时,都保持原有的状态,⽽基类的私有成员任然是私有的,不能被这个派⽣类的⼦类所访问

2、protected的变量和函数只能在类的内部和其派生类中访问,保护继承的特点是基类的所有公有成员和保护成员都成为派⽣类的保护成员,并且只能被它的派⽣类成员函数或友元函数访问,基类的私有成员仍然是私有的

3、private修饰的元素只能在类内访问,私有继承的特点是基类的所有公有成员和保护成员都成为派⽣类的私有成员,并不被它的派⽣类的⼦类所访问,基类的成员只能由⾃己派⽣类访问,⽆法再往下继承

7、大小端存储

大端存储:高字节的数据存放到低字节地址中

小端存储:高字节的数据存放到高字节地址中

网络字节序是大端存储,所以在Socket编程中,往往需要将操作系统所⽤的⼩端存储的IP地址转换为⼤端存储,这样才能进⾏⽹络传输

8、常量指针和指针常量

备注:修饰的是后面

指针常量:指针指向的对象是常量,可以改变指向,不能改变指向的值

常量指针:指针是常量,可以改变指向的值,不能改变其指向

举例:

const double pi = 3.14

const double *ptr = &pi //指针常量

double *const ptr = &pi //常量指针

记忆:看const修饰什么,const修饰pi,所以理解为pi的值不可以改变,即不可以给pi赋值改变p1指向变量的值,但可以通过给ptr赋值不同的地址改变这个指针指向。const修饰pi的值,所以理解为pi的值不可以改变,即pi只能指向固定的⼀个变量地址,但可以通过pi读写这个变量的值。

9、形参与实参的区别

1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元,形参只有在函数内部有效。

2、实参可以是常量、变量、表达式、函数等,⽆论实参是何种类型的变量,在进⾏函数调⽤时,它们都必须具有确定的值,以便把这些值传送给形参。

3、实参和形参在数量上,类型上,顺序上应严格⼀致,否则会发⽣“类型不匹配”的错误。

10、new和malloc的区别

1、new/delete是C++的关键字,需要编译器的支持。malloc/free是库函数,需要头文件的支持

2、使用new操作符申请内存分配时,无需指定内存块的大小,编译器会根据类型信息自行计算,而malloc需要显式地指出所需内存的尺寸

3、 new会先调⽤operator new函数,申请⾜够的内存(通常底层使⽤malloc实现)。然后调⽤类型的构造函数,初始化成员变量,最后返回⾃定义类型指针。delete先调⽤析构函数,然后调⽤operator delete函数释放内存(通常底层使⽤free实现)。malloc/free是库函数,只能动态的申请和释放内存,⽆法强制要求其做⾃定义类型对象构造和析构⼯作。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一些常见C++面试问题及其答案: 1. 什么是C++C++是一种面向对象的编程语言,用于开发高性能的应用程序,包括操作系统、游戏、数据库、Web浏览器、图形用户界面等。 2. C++中的继承是什么? 继承是一种面向对象的编程概念,它允许一个类继承另一个类的属性和方法。子类继承父类的所有公有成员,包括变量和函数。继承使得代码可重用性更高,同时也使代码更易于维护。 3. C++中的多态是什么? 多态是一种面向对象的编程概念,它允许不同的对象对同一消息作出不同的响应。在C++中,多态是通过继承和虚函数实现的。 4. C++中的虚函数是什么? 虚函数是一种特殊的成员函数,允许派生类重写基类的函数。当使用指向基类的指针或引用调用虚函数时,将调用派生类的版本。虚函数允许实现多态性。 5. C++中的引用是什么? 引用是一种指向变量的别名,它与指针不同,不需要使用解引用运算符。引用通常用于函数参数,允许修改函数调用中的变量。 6. C++中的const关键字是什么? const关键字用于定义常量,即不能更改的变量。const还可以用于函数参数和函数返回值,以指示它们不能被修改。const还可以用于类成员函数,以指示它们不会修改对象的状态。 7. C++中的模板是什么? 模板是一种通用编程技术,允许编写不依赖于特定数据类型的代码。模板可以用于函数和类,允许在编译时生成代码。 8. C++中的STL是什么? STL是标准模板库的缩写,是C++标准库的一部分。STL提供了一组通用的数据结构和算法,包括向量、列表、堆栈、队列、映射、集合、排序和搜索等。 9. C++中的内存管理是什么? C++中的内存管理是指程序在运行时如何使用和释放内存。C++中的内存由程序员手动分配和释放,使用new和delete运算符。C++还提供了一组智能指针类,帮助程序员管理内存。 10. C++中的异常处理是什么? 异常处理是一种处理程序运行时错误的方法,允许程序在出现错误时终止执行,并提供错误处理机制。C++中的异常处理使用try、catch和throw关键字实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空有大海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值