一、类继承是什么
首先了解什么是基类,什么是派生类
在面向对象编程中,基类(Base Class 或 Superclass)是一个类的模板,它定义了一些通用的属性和行为。子类(Derived Class 或 Inheritance)可以从基类那里继承这些属性和方法。基类通常包含了共性的功能,而子类则可以在此基础上添加特有的特性和扩展。通过基类,可以实现代码的复用,并支持模块化的结构设计,使得代码组织更清晰,维护更容易。
在C++中,类继承是一种机制,它允许一个类(称为派生类或子类)从另一个已存在的类(称为基类或父类)继承属性和行为。通过继承,派生类可以直接获得基类的成员变量(数据成员)和成员函数(成员函数),这有助于减少代码的重复,并促进了软件模块化。
使用类继承的好处包括:
- 代码复用:子类可以避免重复编写父类已经实现的功能,提高了效率。
- 模块化设计:通过继承,你可以将通用功能抽取到父类,专注于子类的独特部分。
- 灵活性和拓展性:如果需要对原有功能进行扩展,只需在子类中添加或修改相应的方法即可。
以下是C++中类继承的基本语法:
class DerivedClass (AccessSpecifier BaseClass) {
// ...
};
DerivedClass
是派生类的名称。AccessSpecifier
可能是 public、private 或 protected,决定了派生类对基类成员的访问权限,默认为 private。- 如果省略了基类名,表示不继承任何基类,即“无参继承”。
派生类可以覆盖(重写)基类的虚函数,也可以添加新的成员。
二、C++中类继承的使用步骤
使用类继承有以下几个关键步骤:
-
1、声明继承:在派生类的定义开始处,使用
:
操作符指定基类,如class DerivedClass : access_specifier BaseClass
,其中access_specifier
可以是public、private或protected。 -
2、访问权限:选择合适的访问修饰符,决定了子类如何访问基类的成员。
public
表示公开继承,private
隐藏了基类的成员,仅在子类内部可见,而protected
则限制外部访问,但在派生类之间可用。 -
3、继承成员:派生类自动继承了基类的所有公共和保护成员,包括数据成员和成员函数。如果需要,还可以通过关键字
virtual
声明虚函数,实现动态绑定(多态)。 -
4、重写或覆盖:对于基类的成员函数,可以在子类中提供自己的版本,这就是方法的重写。子类版本通常会有一个基类版本的名称加上
override
关键字,用于编译时检查是否真的重写了基类的方法。 -
5、构造函数和析构函数:派生类通常有自己的构造函数,它会在创建新对象时被调用,并有机会初始化基类。析构函数(
~DerivedClass()
)也是虚的,以便正确地释放资源。 -
6、使用派生类的对象:可以直接创建派生类的对象并当作基类处理,因为它们共享相同的接口。
三、类继承实例
class Shape // 基类
{
public:
virtual double getArea() const = 0; // 纯虚函数,用于保证派生类实现面积计算
protected:
int sides;
};
class Rectangle : public Shape // 派生类,继承Shape
{
private:
double length;
double width;
public:
Rectangle(double l, double w) : length(l), width(w) {}
double getArea() const override // 实现基类的纯虚函数
{
return length * width;
}
};
int main()
{
Rectangle rect(4, 5);
double area = rect.getArea(); // 调用Rectangle类的getArea方法
return 0;
}
在这个例子中,Rectangle
类继承了Shape
类,并实现了getArea
函数。当我们创建Rectangle
对象并调用getArea
时,会自动调用其自身的实现,体现了多态性。