C++ 派生类
在C++中,派生类是通过继承一个或多个已有的类(基类)来创建新类的机制。继承是面向对象编程的核心概念之一,它允许新创建的类(派生类)继承并扩展另一个类(基类)的属性和方法。派生类可以添加新的属性和方法,也可以重写(覆盖)基类中的方法,提供不同的实现。
基本概念
- 基类(父类):被继承的类,派生类继承其属性和方法。
- 派生类(子类):通过继承基类获得的新类。它继承了基类的公有和保护成员,并可以添加或覆盖成员函数。
基本语法
派生类的声明语法如下:
class DerivedClassName : accessSpecifier BaseClassName {
// 类体
};
DerivedClassName
:派生类的名称。accessSpecifier
:继承类型,决定了基类成员在派生类中的访问权限。可以是public
、protected
或private
。public
继承:基类的公有成员和保护成员保持其原有的访问级别。protected
继承:基类的公有成员和保护成员在派生类中变为保护成员。private
继承:基类的公有成员和保护成员在派生类中变为私有成员。
BaseClassName
:基类的名称。
继承类型的影响
- 公有继承(
public
):最常见的继承方式,表示"是一个"关系。派生类的对象可以被视为基类的对象。 - 保护继承(
protected
):较少使用,基类的公有和保护成员在派生类中成为保护成员。 - 私有继承(
private
):表示"有一个"关系,基类的公有和保护成员在派生类中变为私有成员。
示例
class Base {
public:
void show() {
cout << "Base class show function" << endl;
}
};
class Derived : public Base {
public:
void show() {
cout << "Derived class show function" << endl;
}
};
在这个例子中,Derived
类继承了Base
类,并重写了show
方法。当Derived
类的对象调用show
方法时,将调用Derived
类中定义的版本。
多态和虚函数
C++支持通过基类指针或引用调用派生类的成员函数,这是通过虚函数(virtual
)实现的,是实现多态的关键。如果基类中的函数被声明为virtual
,派生类可以覆盖这个函数,以实现运行时多态。
class Base {
public:
virtual void show() {
cout << "Base class show function" << endl;
}
};
class Derived : public Base {
public:
void show() override { // 使用override确保函数匹配
cout << "Derived class show function" << endl;
}
};
在这种情况下,即使是通过基类的指针或引用调用show
函数,实际调用的也是派生类中的版本,这就是多态的表现。
构造函数和析构函数
在派生类对象创建时,基类的构造函数会被自动调用,首先初始化基类部分,然后执行派生类的构造函数来初始化派生类新增的部分。析构的过程是相反的,先执行派生类的析构函数,再执行基类的析构函数。
总结
派生类是C++面向对象编程中的一个核心概念,它通过继承机制允许创建复杂的类层次结构,实现代码的重用和扩展。通过合理使用继承、多态和虚函数,可以设计出灵活且易于维护的程序。