【C++】面向对象的三大特性:封装、继承、多态

1. 封装

  • 封装:隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互。
  • 封装性实际上是由编译器去识别关键字public、private和protected,体现在类的成员可以有公有成员(public),私有成员(private),保护成员(protected)。
  • 私有成员是在封装体内被隐藏的部分,只有类的成员函数才可以访问私有成员,而在类体外的函数时不能访问的;公有成员是封装体与外界的一个接口,类体外的函数可以访问公有成员;保护成员是只有该类的成员函数和该类的派生类才可以访问的。
  • 封装的作用是:降低耦合。

2. 继承

  • 继承是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类;
2.1 格式
//Person为父类、基类,Student为派生类、子类,public为继承方式
class Student : public Person
{
}
2.2 继承方式

在这里插入图片描述
【基类成员在不同继承方式下的访问】
在这里插入图片描述

2.3 继承中的作用域
  • 在继承体系中基类和派生类都有独立的作用域;
  • 子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义;
  • 实际中在继承体系里面最好不要定义同名的成员。
2.4 菱形继承
2.4.1 什么是菱形继承
  • 菱形继承是多继承的一种特殊情况;
  • 菱形继承会有数据冗余和二义性;
2.4.2 菱形虚拟继承
  • 虚拟继承可解决菱形继承的二义性和数据冗余的问题。
  • 为什么虚拟继承可以解决这两个问题:由于虚拟继承中存在虚基表。
    在这里插入图片描述

3. 多态

  • 多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为;

【在继承中构成多态的两个条件】

  • 必须通过基类的指针或者引用调用虚函数;
  • 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。

【重载、重写、重定义区别】
在这里插入图片描述

3.1 抽象类
  • 包含纯虚函数的类,抽象类也成为接口类;
  • 纯虚函数:在虚函数的后面写上 = 0 ,则这个函数为纯虚函数;
  • 作用:要求派生类对虚函数进行重写。
3.2 虚函数和虚函数表
  • 虚函数:即被virtual修饰的类成员函数称为虚函数;
  • 虚函数表本质是一个存虚函数指针的指针数组;
  • 虚函数和虚函数表均在代码段。

文章参考链接:
链接1、链接2、链接3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值