【面试】常见C++面试题目

函数和多态的实现

函数实现:函数具体运算过程
函数声明:说明函数参数、返回类型、调用方法。
多态性可以简单的概括为“1个接口,多种方法”,在程序运行的过程中才决定调用的机制
程序实现上是这样,通过父类指针调用子类的函数,可以让父类指针有多种形态。
每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表其中存放着该类所有的虚函数对应的函数指针
在这里插入图片描述
虚函数调用
在这里插入图片描述
编译器只知道pb是B类型的指针,并不知道它指向的具体对象类型 :pb可能指向的是B的对象,也可能指向的是D的对象。
但对于pb->bar(),编译时能够确定的是:此处operator->的另一个参数是B::bar(因为pb是B
类型的,编译器认为bar是B::bar),而B::bar和D::bar在各自虚函数表中的偏移位置是相等的。无论pb指向哪种类型的对象,只要能够确定被调函数在虚函数中的偏移值,待运行时,能够确定具体类型,并能找到相应vptr了,就能找出真正应该调用的函数,从而实现多态。

面向对象的特征并简述

包括四大基本特征和五大基本原则。
特征:抽象、继承、多态、封装

  1. 抽象
  • 忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面.(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口).抽象并不打算了解全部问题,而是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一个数据抽象,而是过程抽象.
  • 数据抽象 -->表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)
  • 过程抽象 -->表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法)
  1. 封装
    封装就是把过程和数据包围起来,对数据的访问只能通过特定的界面.如私有变量,用set,get方法获取
  2. 继承
    为了重用父类代码,并为多态做准备
  3. 多态
    多态是指允许不同类的对象对同一消息做出响应.多态性包括参数化多态性和包含多态性.
    动态链接 -->对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将调用子类中的这个方法,这就是动态链接.

原则:单一职责原则、开放封闭原则、替换原则、依赖原则、接口分离原则
1. 单一职责原则
是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来
2. 开放封闭原则
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能, 那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。
3. 替换原则
子类应当可以替换父类并出现在父类能够出现的任何地方。比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工, 也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。
4. 依赖原则
具体依赖抽象。假设B是较A低的模块,但B需要使用到A的功能, 这个时候,B不应当直接使用A中的具体类:而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到 了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。
5. 接口分离原则
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来

成员函数const的意义

说明这个函数非常安全,不会改变类的属性

malloc和new

重点在构造函数不同
https://blog.csdn.net/nie19940803/article/details/76358673

memcpy和strcpy的区别

strcpy针对字符串
memcpy可以是数组、对象、字符串等,需要指定长度

如何避免死锁

https://uule.iteye.com/blog/2435485

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值