玉林社区   玉林天天茶座   明白:C++的校招的面试题,看看你能答对几
返回列表
查看: 750|回复: 0

明白:C++的校招的面试题,看看你能答对几

[复制链接]

3万

主题

4万

帖子

12万

积分

论坛元老

Rank: 8Rank: 8

积分
126611
发表于 2022-2-7 15:08:21 | 显示全部楼层 |阅读模式

马上注册玉林红豆网会员,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

嗨~大家好呀,最近后台有人问小谷,C++校招的话,需要了解哪些内容,大家知道的,小谷有求必应的,那么之后我就来周期性更新一下作为一C++开发工程师要掌握的知识,本期主要介绍一下C++基础知识吧![url=http:///www.heikw.cn/]爱站云[/url]的最新消息可以到我们平台网站了解一下,也可以咨询客服人员进行详细的解答![align=center]

                               
登录/注册后可看大图
[/align]







1、面向对象的大特性:封装、继承、多态



封装:就是把客观事物封装成抽象的类,可以使某个属性只能被当前类使用,从而避免被其他类或对象进行操作保证了安全性。也可以让使用者不必了解具体类的内部现细节,而只需通过提供给外部的访问接口来访问类中的属性和方法简化编程。



封装的意义:



保护或者防止代码(数据)被我们意中破坏;



保护成员属性,不让类以外的程序直接访问和修改;



隐藏方法细节,简化编程。



用封装来现高内聚,低耦合。



C++中可以给成员变量和成员函数定义访问级别属性:



公开:属性和方法可以在类的内部使用,也可以被继承,也可以在类的外部使用



保护:属性和方法可以在类的内部使用,可以被继承,但不可以在类的外部使用



私有:属性和方法可以在类的内部使用,不可以被继承,也不可以在类的外部使用



继承:指的是可以让某个类型的对象获得另一个类型的对象的属性的方法,继承可以使得子类沿用父类的成员(属性和方法),而需重新编写原来的类并且可以对父类的成员(属性和方法)进行扩展。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。继承提高了代码的复用性和维护性。



继承的特点:



子类可以继承父类非私有成员。



子类可以有自己特有的成员,并不会把父类的成员复制给子类,而去引用。



子类可以重写父类的方法,而重新定义了父类中的方法,叫做重写



子类可以在父类提供方法的基础上,额外新增一些功能。



子类法继承父类的构造方法。



子类不能继承父类中不符合访问权限的成员。



多态:



接口的多种不同的现方式即为多态接口重用!



多态是以封装和继承为基础的,一个类例的相同方法在不同情形下有不同的表现形式,使不同内部结构的对象可以共享相同的外部接口。多态分为静态多态和动态多态。静态多态是通过重载和模板技术现的,在编译期间确定;动态多态是通过虚函数和继承关系现的,执行动态绑定,在运行期间确定。



2类的访问权限:



、、



内存分区:



全局区、堆区、栈区、常量区、代码区



4C++和C的区别:



C++是面向对象的语言,而C是面向过程的语言;



C++引入运算符,取代了C中的库函数;



C++引入引用的概念,而C中没有;



C++引入类的概念,而C中没有;



C++引入函数重载的特性,而C中没有



5堆和栈的区别:



分配和管理方式不同:堆是动态分配的,其空间的分配和释放都由程序员控制;栈是由编译器自动管理的,其分配方式有两种:静态分配由编译器完成,比如局部变量的分配;动态分配由()函数进行分配,但是会由编译器释放;



产生碎片不同:对堆来说,频繁使用或者会造成内存空间的不连续,产生大量碎片,是程序效率降低;对栈来说,不存在碎片问题,因为栈具有先进后出的特性;



生长方向不同:堆是向着内存地址增加的方向增长的,从内存的低地址向高地址方向增长;栈是向着内存地址减小的方向增长的,从内存的高地址向低地址方向增长;



申请大小限制不同:栈顶和栈底是预设好的,大小固定;堆是不连续的内存区域,其大小可以灵活调整。



6和的区别







共同点是:



都是从堆上申请空间,并且需要用户手动释放。



不同的地方是:



1和是函数,和是操作符



2申请的空间不会初始化,可以初始化



申请空间时,需要手动计算空间大小并传递,只需在其后跟上空间的类型即可。



4的返回值为*,在使用时必须强转,不需要,因为后跟的是空间的类型。



5申请空间失败时,返回的是NULL,因此使用时必须判空,不需要,但是需要捕获异常。



6申请自定义类型对象时,只会开辟空间,不会调用构造函数与析构函数,而在申请空间后会调用构造函数完成对象的初始化,在释放空间前会调用析构函数完成空间中资源的清理。



7指针与引用的区别



指针有自己的一块空间,而引用只是一个别;



使用看一个指针的大小是4,而引用则是被引用对象的大小;



作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象;



可以有指针,但是没有引用;



指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能被改变;



指针可以有多级指针(**),而引用止于一级;



指针和引用使用++运算符的意义不一样



如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存露。



8浅拷贝和深拷贝有什么区别



浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享一块内存;



而深拷贝会创造一个相同的对象,新对象与原对象不共享内存,修改新对象不会影响原对象。



9静态内存分配和动态内存分配有什么区别



静态内存分配是在编译时期完成的,不占用CPU资源;动态内存分配是在运行时期完成的,分配和释放需要占用CPU资源;



静态内存分配是在栈配的;动态内存分配是在堆配的;



静态内存分配不需要指针或引用类型的支持;动态内存分配需要;



静态内存分配是按计划分配的,在编译前确定内存块的大小;动态内存分配是按需要分配的;



静态内存分配是把内存的控制权交给了编译器;动态内存分配是把内存的控制权给了程序员;



静态内存分配的运行效率比动态内存分配高,动态内存分配不当可能造成内存漏。



10C++函数中值的传递方式有哪几种?



值传递、指针传递和引用传递



11和区别:



是由双向链表现的,内存空间是不连续的。由链表的现原理可知:



优点:插入和删除效率较高。只需要在插入的地方更改指针的指向即可,不用移动数据。



缺点:L查询效率较低,时间复杂度为O()



拥有一段连续的内存空间,并且起始地址不变,与数组类似:



优点:便于随机访问,时间复杂度为O(1),



缺点:因为内存空间是连续的,所以在进入插入和删除操作时,会造成内存块的拷贝,时间复杂度为O()。



12覆盖和重载之间有什么区别



覆盖是指派生类中重新定义的函数,其函数、参数列表、返回类型与父类完全相同,只是函数体存在区别;覆盖只发生在类的成员函数中;



重载是指两个函数具有相同的函数,不同的参数列表,不关心返回值;当调用函数时,根据传递的参数列表来判断调用哪个函数;重载可以是类的成员函数,也可以是普通函数。



好了本期C++基础内容就讲到这里了~其他内容我们下期见吧!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

收藏:1 | 帖子:8万



侵权举报:本页面所涉内容均为用户发表并上传,岭南都会网仅提供存储服务,岭南都会网不承担相应的法律责任;如存在侵权问题,请权利人与岭南都会网联系删除!