继承的概念
继承可以理解为一种从一个已有的类派生出新的类的机制,派生的新类被称为子类或派生类,而被派生的原有类被称为基类或父类。在派生时,子类继承了基类的所有属性和方法,同时可以重新定义一些属性和方法。
继承的类型
C++中有以下几种继承类型:
公有继承
在这种继承方式中,基类的公有成员也会成为子类的公有成员,基类的保护成员也会成为子类的保护成员,而基类的私有成员是不能被子类访问的。
私有继承
在这种继承方式中,基类中的所有成员都会成为子类的私有成员,不管它们是公有的、保护的还是私有的。
保护继承
在这种继承方式中,基类的公有成员和保护成员都会成为子类的保护成员,而基类的私有成员是不能被子类访问的。
多重继承
在多重继承中,一个子类同时继承多个基类。C++允许多个基类以逗号分隔的方式出现在子类的继承列表中。
虚继承
在虚继承中,派生类只保留第一个基类的继承关系,其他基类的继承关系被抛弃,以避免存在多个基类之间的冲突。
继承的基本语法
在C++中,可以使用以下语法来定义一个继承:
class 派生类名 : 继承方式 基类名 {
// 派生类成员的定义
};
例如,下面的代码演示了如何使用公有继承来创建一个圆形类,并从该类派生出一个立方体类:
#include <iostream>
#include <cmath>
using namespace std;
class Circle {
protected:
double radius;
public:
Circle(double r): radius(r) {}
double area() { return pow(radius, 2) * M_PI; }
};
class Cube: public Circle {
public:
Cube(double r): Circle(r) {}
double volume() { return area() * radius / 3; }
};
int main() {
Cube c(5);
cout << "Cube volume: " << c.volume() << endl;
return 0;
}
在上面的代码中,Cube类通过公有继承自Circle类,从而拥有了Circle类中的属性和方法。我们在派生类中定义了一个额外的方法volume(),用于计算立方体的体积。在main()函数中,我们创建了一个Cube对象并打印出它的体积。