C/C++面试八股题(一)

目录:

1.请说说操作符重载?哪些操作符不能重载?

2.在C++中重写、重载和隐藏的区别是什么?

3.请说明一下面向对象的三大特性。

4.什么是虚函数?虚函数存在哪?虚函数的优点有哪些?

5.虚函数如何实现多态性?

6.虚函数在子类中如何重新定义?

7.关于虚函数表的注意事项。

内容:

1.请说说操作符重载?哪些操作符不能重载?

操作符重载,就是把已经定义的、有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能。

在 C++中,当用户定义了类的对象时,两个对象之间是不能进行内置类型的操作符运算的,比如两个自定义类的对象相加,如果没有重载+运算符就会出错。但 C++允许用户把这些运算符添加到自己的类中以方便类对象之间的运算,就像内置类型的运算一样方便。

可以重载的运算符:

  • 算数运算符
  • 自增自减
  • 比较运算
  • 位运算
  • 赋值运算

不能被重载的运算符:

  • 成员选择操作符(.):无法改变点操作符的行为。点运算符“.”不能重载是为了保证访问成员的功能不能被改变
  • sizeof:它是一个关键字,无法重载。
  • typeid:它是一个运算符,无法重载。
  • 条件运算符(?:):无法改变条件运算符的行为。条件运算符“?:”不能重载是因为如果能够重载,该运算符的本意是执行 exp2 和 exp3 中的一个,可是重载后,不能保证只执行了一个,还是说两个都能执行?亦或两条都不能执行?
  • 展开操作符(::):它用于指定作用域,不能被重载。域解析符“::”不能重载是因为它只是在编译的时候进行域解析,而没有运算的参与进来。如果重载之后,“::”运算符有了新的语义,那会引起混淆。

2.在C++中重写、重载和隐藏的区别是什么?

重写(Override):

  • 重写是指子类重新定义从父类继承的虚函数,使其具有不同的实现。
  • 重写的函数签名(函数名、参数列表和返回类型)必须与被重写函数相同。
  • 在运行时,根据具体的对象类型,调用的是子类重写的版本。例如,“// 父类 classA { public:virtual int fun (int a){} };// 子类 classB : public A { public:virtual int fun (int a) override {} }”。重写是父类和子类之间的垂直关系,在重写关系中,调用方法根据对象类型决定。

重载(Overloading):

  • 函数名相同但参数列表(类型、个数、顺序)不同,返回值类型无要求

隐藏(Hiding):

  • 隐藏是指在派生类中定义与父类具有相同名称的成员函数,使其隐藏父类中的同名函数。
  • 隐藏函数与父类的函数没有多态性,只有通过对象的实际类型调用时才会调用相应的函数。举个例子:// 父类 classA { public:void fun (int a){ cout << "A 中的 fun 函数" << endl;} };// 子类 classB : public A { public:// 隐藏父类的 fun 函数 void fun (int a){ cout << "B 中的 fun 函数" << endl;} }”。总结,重写发生在不同的类之间且要求严格,重载发生在同一个类内,隐藏发生在不同类间

3.请说明一下面向对象的三大特性

面向对象编程的三大特性是封装、继承和多态

封装(Encapsulation):

  • 封装是将数据和操作封装在一个单元(类)中的机制。对外部隐藏具体实现细节
  • 通过封装,实现类的成员变量和成员函数作为一个整体进行管理和操作。
  • 封装隐藏了数据的具体实现细节,提高安全性,提高可维护性。
  • 访问修饰符如 private、public、protected 等限制对类成员的访问。

继承(Inheritance):

  • 继承是通过创建派生类来扩展和重用已有类的机制。
  • 继承是指一个类(子类)从另一个类(父类)继承属性和方法的过程。子类可以自定义新的属性和方法,也可以覆盖或扩展继承的父类的属性和方法。子类继承了父类的属性和方法,可以直接使用父类的成员,也可以对继承的父类方法进行重写。
  • 继承的优势包括代码复用,创建类的层次结构使代码更有组织和易于理解,同时也是实现多态的基础。

多态(Polymorphism):

  • 多态是指同一类型的对象,在不同情况下表现出不同的行为。
  • 多态允许使用基类的指针或引用来引用派生类的对象,实现了多种形态的使用。
  • 编译时多态使用函数重载和运算符重载;运行时多态通过虚函数实现(动态绑定)。
  • 多态的优势包括灵活性和可扩展性,代码重用,提供统一接口使代码更加通用和可维护。
  • 实现多态的三个必要条件为继承、重写、父类引用指向子类对象。

4.什么是虚函数?虚函数存在哪?虚函数的优点有哪些?

虚函数是在普通函数前面加了 virtual 关键字的成员函数,在某基类中声明为 virtual 并在一个或多个派生类中被重新定义,实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。

关于虚函数的存在位置,虚函数表是与类关联的,一个类只有一张虚函数表。虚函数和普通函数一样的,都是存在代码段的。

优点:

实现多态性:通过使用虚函数,可以创建一个统一接口,以便处理具有不同类型但具有相似功能和行为的对象。

简化代码逻辑:通过将通用操作放在基类中定义,并使用派生类覆盖特定功能,可以减少代码冗余并提高可维护性。

扩展性和灵活性:通过添加新的派生类并覆盖虚函数,可以轻松地扩展和修改现有的代码结构。

5.虚函数如何实现多态性?

虚函数是 C++ 中实现多态的重要机制。多态就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数,让父类的指针有 “多种形态”。

例:有基类 A 和派生类 B,A 中有虚函数 print,B 重写了这个函数。在主函数中,先创建 A 和 B 的对象,然后用 A * 类型的指针分别指向 A 和 B 的对象,调用 print 函数时,如果 A 的 print 不是虚函数,那么无论指针指向的是哪个对象,都只会调用 A 的 print 函数;但当 A 的 print 是虚函数时,根据指针实际指向的对象来调用相应的函数,即如果指针指向 B 的对象,就会调用 B 重写后的 print 函数,从而实现多态性。

6.虚函数在子类中如何重新定义?

当子类继承有虚函数的父类时,子类可以重新定义父类的虚函数。如果基类的成员函数设为 virtual,其派生类的相应函数也会自动变为虚函数。在重写虚函数时,子类中的函数名、函数类型、返回值类型、函数参数个数和类型都要与父类的虚函数相同,并根据子类的需要重新定义函数功能。

例:有一个父类 Shape,其中有虚函数 calcArea,子类 Circle 和 Rect 分别重写了这个函数来计算圆形和矩形的面积。子类在重写虚函数时,不一定要在函数声明前加上 virtual 关键字,但最好加上以便更清晰地看出这是虚函数。如果子类不重写虚函数,则它会继承父类的虚函数。

7.关于虚函数表的注意事项

  • 每个含有虚函数的类都有一个虚函数表,表中存放着虚函数的地址。当通过基类指针或引用调用虚函数时,实际上是通过虚函数表来找到正确的函数地址进行调用。
  • 虚函数表只有一份,而有多少个对象,就对应多少个虚函数表指针。
  • 静态成员函数不能是虚函数,因为静态成员函数不受限与某个对象。
  • inline 函数不能是虚函数,因为 inline 函数是不能在运行中动态确定其位置的,即使虚函数在类的内部定义,编译时,仍将其视为非 inline 的。
  • 使用虚函数,系统要有一定的空间开销,当一个类带有虚函数时,编译器会为该类构造一个虚函数表,虚函数表在编译时候就已经生成了。它是一个指针数组,存放每个虚函数的入口地址。

声明:本人不是什么大佬,如有问题欢迎评论区或者私信我,很愿意跟大家一起探讨解决问题,共同一起进步。

后续还会继续更新,感谢大家支持。

#C/C++##面经##八股##牛客创作赏金赛##嵌入式#
嵌入式/C++八股 文章被收录于专栏

本人双飞本,校招上岸广和通。此专栏覆盖嵌入式常见面试题,有C/C++相关的知识,数据结构和算法也有嵌入式相关的知识,如操作系统、网络协议、硬件知识。本人也是校招过来的,大家底子甚至项目,可能都不错,但是在面试准备中常见八股可能准备不全。此专栏很适合新手学习基础也适合大佬备战复习,比较全面。最终希望各位友友们早日拿到心仪offer。也希望大家点点赞,收藏,送送小花。这是对我的肯定和鼓励。 持续更新中

全部评论
友友们有什么建议,欢迎底下评论或者私信哦
2 回复 分享
发布于 11-28 11:45 陕西
欢迎大家订阅此专栏,订阅点赞收藏送花后,截图si聊我,免费赠送嵌入式学习资料大礼包(含简历模版、c/c++、嵌入式等资料)
2 回复 分享
发布于 12-14 15:58 陕西
很不错
1 回复 分享
发布于 12-13 17:06 陕西
求给资料,博主
1 回复 分享
发布于 昨天 11:35 陕西

相关推荐

保姆级合同攻略又到毕业季,很多大学生要面临跟工作单位签订合同;租房合同?就业合同?劳动合同?财产纠纷,你只要进入社会你肯定就会遇到一些需要签合同和协议的情况,怎么避免合同踩坑,这是我们的一大痛点。下面我根据咱们常见的合同进行介绍!!一、劳动合同什么是劳动合同?《中华人民共和国劳动合同法》第十七条规定,劳动合同应当具备以下条款:(一)用人单位的名称、住所和法定代表人或者主要负责人;(二)劳动者的姓名、住址和居民身份证或者其他有效身份证件号码;(三)劳动合同期限;(四)工作内容和工作地点;(五)工作时间和休息休假;(六)劳动报酬;(七)社会保险;(八)劳动保护、劳动条件和职业危害防护;(九)法律、法规规定应当纳入劳动合同的其他事项。劳动合同除前款规定的必备条款外,用人单位与劳动者可以约定试用期、培训、保守秘密、补充保险和福利待遇等其他事项。在签订劳动合同时,同学们一定要检查合同是否对以上条款有明确约定。合同期限、劳动报酬、工作内容和工作地点等条款要确保都已填写完善后才能签字哦~注意1.签订合同不能“晚”已经入职一个多月,但是企业却迟迟不跟劳动者签订劳动合同,这种情况在职场时有发生,这对于同学们争取自己的劳动权益非常不利。根据《中华人民共和国劳动合同法》第十条规定,建立劳动关系,应当订立书面劳动合同。已建立劳动关系,未同时订立书面劳动合同的,应当自用工之日起一个月内订立书面劳动合同。用人单位与劳动者在用工前订立劳动合同的,劳动关系自用工之日起建立。也就是说,用人单位在用工之日起便与劳动者建立了劳动关系,劳动合同的签订最晚不能超过用工之日起一个月。用人单位自用工之日起超过一个月不满一年未与劳动者订立书面劳动合同的,应当向劳动者每月支付二倍的工资。2.“霸王条款”要看清签订劳动合同时,同学们要注意识别&amp;nbsp;“霸王条款”。所谓“霸王条款”,指的是一些公司在劳动合同中,设置了可以随意解雇员工、免除公司责任、排除员工权益或限制员工辞职权的条款。比如自愿放弃缴纳社会保险;劳动者发生工伤自行负责;一定期限内不得结婚、生育,否则劳动合同终止;未达到工作年限离职,需支付违约金等等。这种合同可能严重损害员工的权益,但是由于违反法律规定也会被认定为无效条款。此外,一些公司会要求员工在合同中同意将身份证件扣押或个人财产或财务权益作为抵押,以确保员工履行合同。如果员工不按合同要求履行,可能会面临无法取回证件或财产损失。同学们切记,无需将身份证件和个人财产抵押给公司,如果已被扣押,可以向劳动监察部门投诉。3.拒绝“空白”合同一些不良公司可能会口头承诺福利和权益,但没有在劳动合同中进行约定,在实际操作中不予执行,或者通过口头协议随时修改合同内容。同学们要注意确保正式合同与口头协议一致,避免公司的“阴阳”手法。还有的公司在合同中留下一些重要的条款,比如合同期限、劳动报酬、工作岗位、工作地点、工作时间等,未明确约定,以便公司随时根据自己的需要填写。这种合同可能导致员工在未来面临不确定性和利益受损的风险。同学们在签订合同时,要确保合同中的所有条款、日期等信息都明确约定,不留空白。二、租房合同房屋租赁合同是指住房出租人和承租人在租赁住房时签订的、用来明确双方权利和义务的协议。租房合同的注意事项如下:一、不能“签”口头协议一些房东或者房产公司的业务员在看房期间表现得十分耐心和热情,许多租户在签订合同时,被房东和业务员的热情所麻痹,而未将房东的口头承诺写进合同。在合同签订后,房东和业务员往往一口咬定,以签订的合同为准,不承认不履行之前口头承诺的种种,此时租户也只能吃哑巴亏。所以,您在签订合同时,一定要把相关的事项尽可能在合同中以书面的形式体现出来,任何口头承诺均视为无效。即使作为租客的你不了解房屋租赁合同常用版的详细内容,也应明确水费、电费、煤气费、电话费、光缆电视收视费、卫生费和物业管理费等由谁承担,并列明租住前的各项数字,以区分责任。此外,签订合同前还应注意入住之前的水电气以及物管还有光纤电话费等是否结清。二、确定房屋的所有权或者处分权1、若出租人是房东,请检查房产证上的户名或查看购房合同。2、若出租人是二房东或中介公司,则需要检查房东的授权委托书原件(最好经过公证)。3、若出租人是租客,则需要房东同意转租的书面证明文件原件,并在合同中约定如产权人同意转租的书面证明文件不真实时,转租人应承担何种责任。三、明确租赁期限在实际生活中,房东和租客双方往往会在房屋租赁合同中约定租赁期限。在这个期限内,如无特殊情况,出租人不得收回住房,承租人也不得放弃这一住房而租赁别的住房。期限到了之后,承租人需将住房退还给出租人。如果租客要继续租赁这套住房,则要提前通知出租人(注意:同等条件下,租客是享有优先承租权的)。经协商,出租人同意后,租客可继续租赁这套住房。而如果没有明确租赁期限的话,租客就可能面临着合同随时被解除的风险。依照我国合同法的相关规定,当事人对租赁期限没有约定或者约定不明确,视为不定期租赁,当事人可以随时解除合同。注意:租房期限长是20年,如超过20年则超出部分无效。一般都是一年一签四、租期内转租需明确程序在居住过程中,租客可能会因为一些事情,不能继续住房而需要转租;或者部分租客租房的目的原本就不是自住,而是想通过转租取得租金收入。由于类似转租行为会影响到出租人的利益,所以双方应该在合同中对转租加以明确规定。如果允许转租,双方可以协商确定一个分享转租收入的比例,还应明确转租的程序,以免因转租事项产生分歧;如果不允许转租,而租客擅自转租,出租人则有权终止租赁合同。五、明确押金数目及其退还流程合同要注明押金数目,明确租赁合同到期后出租人以何种方式将押金退还,并应在合同中明确规定:房屋设施无毁损,业主应在租约期满后N个工作日内全额退还押金(注意:一定要明确押金退还期限)。此外,合同中最好设立押金扣除条款,说明哪些具体情况下房东才可以扣除相应的押金金额,以避免退租时产生押金纠纷(我国法律未对押金作出规定)。六、房屋物品交割,明确维修责任签订租赁合同前,承租方应详细清点屋内设施并把房屋内设施标注在合同中,除简单的家具和电器的试用外,租客应该和房东或中介协商,列出所有的家具、电器状况清单。如有必要,还需要房东(中介)提供电器的购买发票,并通过照相的形式保存租房时的现状,以避免纠纷。另外关于居住期间的产生的维修问题归谁承担,如平时使用的家具家电的损耗、房屋的主体结构的损坏等,也都应在合同中有所体现。注意:出租人未及时修复损坏的房屋,影响承租人正常使用,应按照约定承担赔偿责任或减少租金,也可由承租人自行维修,维修费用由出租人负担。但如果是因为承租人使用不当而造成损坏的,由承租人负责维修或赔偿。七、明确违约责任在房屋租赁过程中,经常会遇到各类违约情况,而为了保障自己的合法权益,在签订合同时,双方就要想到可能产生的违反合同的行为,并在合同中规定相应的惩罚办法,包括双方需配合的时间,证件等,因违约付出的成本越高,合同执行的安全性越高。八、合同要写明住房用途合同应明确住房是用于承租人自住、承租人一家居住、还是允许承租人或其家庭与其他人合住(就是住几个人,允许谁住都要规定清楚);住房是仅能用于居住,还是同时可以有其他用途,如办公等,都应规定。九、合同无效的情况另外,大家在签订租赁合同时,应注意以下情况所签订的合同不具备法律效力:1、一方以欺诈,胁迫的手段订立合同,损害国家利益;2、出租人不具有出租房屋的实体权利,将导致合同无效。3、将违法建盖的房屋用于出租的,将导致租赁合同无效。比如说经常遇到的城中村违建物。4、租赁合同的期限违反法律规定的,合同无效。(租赁期限不得超过二十年)5、法律法规禁止出租的合同无效。(公租房、军产房、廉租房等都属于这一类)&nbsp;&nbsp;c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
评论
16
22
分享
牛客网
牛客企业服务