C++入门——60s从0到1
继承与派生
C++中的继承与派生是面向对象编程的两个核心概念,它们允许程序员创建新的类(派生类)基于已有的类(基类),从而实现代码的重用和扩展。
继承
是指一个类(派生类或子类)继承另一个类(基类或父类)的属性和行为。这意味着派生类会获得基类的所有公有(public)和保护(protected)成员(包括数据成员和成员函数)。派生类可以添加新的成员,也可以重写或扩展基类的成员。
派生
是指通过继承创建新类的过程。派生类继承了基类的所有公有和保护成员,同时还可以添加新的成员或重写基类的成员。
继承的种类
C++支持三种继承方式:
1.公有继承(Public Inheritance):基类的公有成员和保护成员在派生类中保持相同的访问权限,而基类的私有成员在派生类中是不可访问的。
2.保护继承(Protected Inheritance):基类的公有成员和保护成员在派生类中变为保护成员,而基类的私有成员在派生类中是不可访问的。
3.私有继承(Private Inheritance):基类的公有成员和保护成员在派生类中变为私有成员,而基类的私有成员在派生类中是不可访问的。
继承与派生的特点
- 代码重用:通过继承,派生类可以重用基类的代码,避免了代码重复。
- 扩展性:派生类可以在继承基类的基础上添加新的功能或修改已有功能。
- 多态性:通过继承和虚函数,可以实现运行时多态,即根据对象的实际类型调用相应的成员函数。
示例
下面是一个简单的C++继承与派生的示例:
#include <iostream> // 基类 class Shape { public: void draw() { std::cout << "Drawing a shape..." << std::endl; } }; // 派生类 class Circle : public Shape { public: void draw() override { // 重写基类的draw方法 std::cout << "Drawing a circle..." << std::endl; } }; int main() { Shape* shapePtr = new Circle(); // 向上转型 shapePtr->draw(); // 调用Circle类的draw方法,输出"Drawing a circle..." delete shapePtr; return 0; } ```
在这个示例中,`Circle` 类继承自 `Shape` 类,并重写了 `draw` 方法。在 `main` 函数中,我们创建了一个 `Circle` 对象,并将其指针赋给了一个 `Shape` 类型的指针 `shapePtr`。由于 `Circle` 是 `Shape` 的派生类,因此这种转换是合法的(向上转型)。当我们调用 `shapePtr->draw()` 时,实际上调用的是 `Circle` 类的 `draw` 方法,而不是 `Shape` 类的。这就是多态性的一个例子。