【C++】封装、继承、多态、虚函数

1、面向对象

是相对于面向过程来说的,面向对象时将功能等通过对象来实现的,将功能封装到对象中,让对象去实现具体的细节。是对数据一种优化,操作起来更加的方便,简化了过程。

将现实世界中的实体转化为计算机世界中,我们将实体的属性和行为,转化为成员变量和成员方法.
属性——成员变量,行为——成员方法

2、封装

将对象的属性和实现细节隐藏,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。具体实现使用访问限定符

3、继承

继承的本质是代码复用。派生类继承了基类除了构造和析构以外的所有成员

访问限定符public:任意位置          protected:本类和子类             private:本类

继承方式访问限定publicprotectedprivate
public publicprotected不可访问
protected protectedprotected不可访问
private privateprivate不可访问

类与类的三种关系:是以成员变量的方式实现(私有继承是一种has_a的关系)

  • 组合:a part of-------has_a
  • 继承:a kind of------is_a
  • 代理

同名函数的关系

  • 重载:overload
  • 隐藏:overhide   派生类中函数把基类中的所有同名函数隐藏(不同作用域--继承,同名,同参)
  • 重写:override   

4、多态

接口的多种不同的实现方式即为多态。为了实现接口复用。

多态分为静多态和动多态。静多态是编译时期的多态,主要使用模板和函数重载实现的。动多态是运行时的多态,利用虚函数和虚函数机制实现的。

1.虚函数

虚函数就是在类的普通成员函数之前加关键字virtual。c++中的虚函数主要用于实现“运行时多态”。父类中提供虚函数的实现,为子类提供默认的函数实现,而子类也可以重写父类的虚函数实现子类的特殊化(重写也称覆盖)。虚函数机制中有两个重要的东西虚函数表(vftable)和虚函数指针(vfptr)。

2.虚函数表

虚函数表是在编译阶段生成的,存放在.rodata段,每一个类都有一个vftable。vftable中放有三样东西,RTTI(运行时的类型),vfptr相对于类型的偏移量、虚函数的入口地址。

3.虚函数指针

一个虚函数指针(vfptr),它指向一个虚函数表vftable。生存周期从程序开始到程序结束,指向哪个类的对象,指针就指向哪个类的虚函数表。虚函数指针的优先级最高,在内存布局的最前面。

4.哪些函数可以是虚函数

可以是虚函数的两个前提是:函数可以取地址、依赖对象调用

  • 普通函数                            不可以,不依赖对象
  • 类的普通函数                     可以
  • 构造函数                            不可以,对象还未生成
  • 析构函数                            可以
  • 静态成员函数                     不可以,不依赖对象
  • inline函数                           不可以,不生成符号,没办法取地址

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值