C++ 中的继承
继承是面向对象编程(OOP)的核心概念之一。它提供了一种机制,使得一个类可以获取另一个类的特性(字段与方法)。换句话说,继承就是在已有类的基础上创建新类。新类(派生类)可以复用原有类(基类)的字段和方法。
示例:在下面的示例中,Animal 是基类,而 Dog、Cat 和 Cow 都是派生类,它们扩展了 Animal 类。
语法
class 子类 : public 父类
{
// 新增的字段与方法
};
C++ 继承的工作原理:
在 C++ 中,使用冒号 : 加上访问限定符(如 public)来实现继承。它让派生类(子类)获得基类(父类)的数据成员(字段)和成员函数(方法)。
当一个类继承另一个类时,它会得到父类所有可访问的成员;同时,子类也可以对这些成员进行重新定义(重写)或添加新的功能。
C++ 中继承的类型
1. 单继承
在单继承中,子类仅从一个父类派生,只继承单一父类的属性和行为。有时它也被称为简单继承。
#include <iostream>
using namespace std;
//交通工具
class Vehicle {
public:
Vehicle() {
cout << "This is a Vehicle" << endl;
}
};
//轿车
class Car : public Vehicle {
public:
Car() {
cout << "This Vehicle is Car" << endl;
}
};
int main() {
Car obj;
return 0;
}
This is a Vehicle
This Vehicle is Car
2. 多重继承
多重继承是 C++ 的一项特性,它允许一个类同时从多个基类继承。
各基类构造函数的调用顺序与继承顺序相同。例如在下段示例代码中,B 的构造函数先于 A 的构造函数被调用。
语法示例:
class A{
// ...
};
class B{
// ...
};
class C : public A, public B{
// ...
};
3. 多级继承
C++ 中的多级继承是指:一个类从另一个已经派生过的类再派生,从而形成一条继承链。
#include <iostream>
using namespace std;
class Vehicle{
public:
Vehicle(){
cout << "This is a Vehicle" << endl;
}
};
// 从 Vehicle 派生的类
class FourWheeler : public Vehicle{
public:
FourWheeler()
{
cout << "4 Wheeler Vehicles" << endl;
}
};
// 从FourWheeler(四轮车)派生的子类
class Car : public FourWheeler{
public:
Car()
{
cout << "This 4 Wheeler Vehicle is a Car" << endl;
}
};
int main()
{
Car obj;
return 0;
}
This is a Vehicle
4 Wheeler Vehicles
This 4 Wheeler Vehicle is a Car
4. 分层继承
在分层继承中,多个子类共同继承自同一个基类,也就是说,从一个基类派生出多个不同的派生类。
例如:Car(小汽车)和 Bus(公共汽车)都继承自 Vehicle(车辆)。
5. 混合继承
当两种或两种以上的继承方式在同一段程序里组合出现时,就称为混合继承。
例如:某个类既使用了多重继承,又处于一条多级继承链中。
混合继承在 C++ 中可能引发菱形问题(diamond problem)。
当某个派生类同时继承了两个拥有共同基类的类时,就会出现该问题:最终派生类里会包含多份共同基类的成员,从而产生访问歧义——到底用哪一份?
解决办法:使用虚继承(virtual inheritance),让共同基类只保留一份共享副本。