C++是一种面向对象的语言(与之不同的是,C语言是一种面向过程的语言),而面向对象的三大特性分别为封装、继承与多态。
一、封装性
封装指的是将数据与行为包装在一个整体中,并以此来控制对其访问的方式与权限。
C++中封装通过访问说明符实现,分为 public、private 和protected 三种访问级别:
类型 | 关键字 | 权限 |
公有类型 | public | 任何对象都可以访问 |
保护类型 | protected | 只有类内、派生类和友元可以访问 (关于友元函数的使用,欢迎查看我之前的文章:C++的友元函数) |
私有类型 | private | 只能在类内部访问 |
封装可以保证数据的安全性,防止外部直接访问和修改对象的内部状态,同时提供公共接口来控制和管理对象的行为。
二、继承性
继承是指一个新的类(称为子类或派生类)可以从已有的类(称为父类或基类)中继承属性和行为。C++支持单继承和多重继承。在单继承中,一个子类只能继承一个父类;在多重继承中,一个子类可以同时继承多个父类。如果想了解C++继承使用,可以看我之前的文章:C++继承。
使用C++继承可以帮助代码重用,使得程序结构更清晰、逻辑更简洁。通过定义一个通用的父类来描述一组类之间的共同特征,然后再创建特定的子类来细化这些特征。
三、多态性
C++的多态性指的是:同类型的操作对于不同的对象会有不同的行为,分为运行时多态与编译时多态。
3.1 运行时多态
运行时多态主要通过虚函数来实现。允许在基类中写入虚函数,拥有纯虚函数的类被称为抽象类。根据不同派生类的需要重写不同的虚函数,以适应多种不同需求。如果想了解有关虚函数的使用,请查看我之前写的文章:C++的抽象类
3.2 编译时多态
编译时多态是通过函数重载与运算符重载实现的。如果想了解C++函数重载的使用,请查看我之前的文章:C++的函数重载。
针对有些运算符也不可以重载,可以查看这篇文章:C++重载运算符。
允许允许同一个函数名或运算符进行不同的操作,根据参数的类型或数量来选择合适的函数或操作符。