C++研发-找工作知识点

此文暂时用来记录我在笔试、面试中遇到过的知识点。

语言

以C/C++为主。

面向对象:封装、继承、多态。
封装
把客观事物封装成抽象的类,可以使代码模块化(为了代码重用)
并且可以对类里的数据/方法进行访问权限控制,有利于程序的健壮性

继承
子类继承父类共性的东西,有利于代码的复用性(为了代码重用)
可以扩展已存在的代码

多态
允许将子类类型的指针赋给其父类类型的指针(为了接口重用)
以实现一个接口,多种方法
不论传来的究竟是哪个类的对象,函数都能通过同一个接口调用到适合各自对象的实现方法。

多态分两种:
编译时多态,通过函数重载进行。
运行时多态,通过虚函数调用进行。

动态绑定:经虚表调用虚函数的过程。其表现出来的现象称为运行时多态。
区别于传统的函数调用:静态绑定。函数的调用在编译阶段就被确定。
发生条件:
通过指针来调用函数,且调用的是虚函数。
指针upcast向上转型。(继承类向基类)

虚函数是针对类的。同一个类的所有对象的虚表都一样。
每个对象的虚表指针是在构造函数中初始化的。
而虚表中的内容是在编译阶段就填好了。

重载vs重写

重载overload
发生条件:对同一个类中的两个成员函数,
其函数名相同,参数列表不同
virtual不影响

若满足上述条件,但两个函数分属基类和派生类,则此时,基类中的函数将被隐藏。

重写override
发生条件:对基类和派生类中的两个成员函数,
其函数名相同,且参数列表也相同
基类中函数为virtual

若满足上述条件,但基类中的函数无virtual,则此时,基类中的函数将被隐藏。

上述两个隐藏规则对数据成员也适用。

成员函数重载时,参数列表为空,是一元,参数列表是1,为2元
友元函数重载时,参数列表为1,说明是1元,为2说明是2元(因为友元函数重载运算符时,没有this指针指向对象,故参数个数保持和原来一样,运算符至少有一个参数。)

引用&指针

A &ra = a
引用ra是对类型为A的对象a的引用,是a的别名。
引用不能引用引用,因为引用不是对象。
引用从被定义起就与所引之物绑定到一起,故定义引用的同时一定要对其赋初值,且引用的值不允许再改变。引用也不可以为空。

A *pa = a
指针pa是对类型为A的对象a的指向,是a的地址。
指针本身是一个对象。
可以为空,其值可以改变。若定义时未赋初值,其值为一个不确定的值。

四种类型转换操作符

const_cast
常量性移除,唯一有此能力的c++风格的转型操作符
reinterpret_cast
执行低级转型,操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。
在类型之间指向的内容不做任何类型的检查和转换。
实际动作及结果可能取决于编译器,不可移植
dynamic_cast
安全向下转型,只用于对象的指针和引用,用来决定某对象是否归属继承体系中的某个类型
唯一无法由旧式执行的动作,也是唯一可能耗费重大运行成本的转型动作
当用于多态类型时(包含虚函数),它允许任意的隐式类型转换以及相反过程。不过,与static_cast不同,在后一种情况里(即隐式转换的相反过程),dynamic_cast根据RTTI信息检查操作是否有效。即在转换时dynamic_cast会检查转换是否能返回一个被请求的有效的完整对象。这种检查不是语法上的,而是真实情况的检查。检测在运行时进行,如果被转换的指针不是一个被请求的有效完整的对象指针,返回值为NULL。
static_cast
强迫隐式转换,以及用来执行上述多种转换的逆向转换,const_cast的逆向除外。
该运算符没有运行时类型检查来保证转换的安全性。
主要有如下几种用法:
1)用于基本数据类型之间的转换,如把int转换成char,non-const 对象转型为 const 对象(这里相反方向不可以,C++只有const_cast可以)。
2)把空指针转换成目标类型的指针。(之前的做法是用强制转换(type-id*))
3)把任何类型的表达式转换成void类型。
4)应用到类的指针上,它允许子类类型的指针转换为父类类型的指针(upercasting这是一个有效的隐式转换);也能够执行相反动作,即转换父类为它的子类(downcasting),这种转换的安全性需要开发人员来保证(主要是在非上下转型中)。
注意:
1.static_cast不能转换掉expression的const、volitale、或者__unaligned属性。
2.在非基本类型或上下转型中,被转换的父类需要检查是否与目的类型相一致,否则,如果在两个完全不相干的类之间进行转换,将会导致编译出错。
小结
四种类型转换操作符对于隐式的类型转换没有必

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值