C++面向对象有三大特性:封装, 继承, 多态
上一篇文章我们主要讲了C++面向对象的封装特性, 了解了类和对象, 今天我们来讲解继承这个特性, 进一步了解类之间的关系
在现实生活中,儿子可以继承父母的财产, 在编程世界里, 有子类和父类, 子类可以继承父类的特性, 这就是C++面向对象的特性之一继承
父类和子类
父类, 也叫基类, 是被继承的类
子类, 也叫派生类, 继承父类的类
下面用简单的图形类代码进行举例:
父类图形代码如下:
// 父类:基础图形(Shape)- 封装所有图形的通用属性和方法
class Shape {
public:
// 通用属性:所有图形都有的基准坐标、颜色
int x; // 基准点x坐标(圆心/左上角)
int y; // 基准点y坐标
string color; // 图形颜色
// 通用方法:显示图形基础信息(子类直接继承使用)
void showBaseInfo() {
cout << "图形位置:(" << x << "," << y << "),颜色:" << color << endl;
}
// 通用方法框架:计算面积(子类可直接用,也可补充自身逻辑)
double calculateArea() {
cout << "基础图形无具体面积计算逻辑" << endl;
return 0.0;
}
// 通用方法框架:绘制图形(子类可直接用,也可补充自身逻辑)
void draw() {
cout << "正在绘制基础图形" << endl;
}
};
子类圆形代码如下
// 子类:圆形(Circle)- 继承基础图形,添加特有属性和方法
class Circle : public Shape {
public:
int radius; // 圆形特有属性:半径
// 子类重写:计算圆形面积(覆盖父类的通用方法)
double calculateArea() {
return 3.14 * radius * radius; // 圆形专属面积公式
}
// 子类重写:绘制圆形(覆盖父类的通用方法)
void draw() {
cout << "正在绘制圆形:半径" << radius << ",";
showBaseInfo(); // 调用父类继承的方法
}
};
子类矩形代码如下:
// 子类:矩形(Rectangle)- 继承基础图形,添加特有属性和方法
class Rectangle : public Shape {
public:
int width; // 矩形特有属性:宽
int height; // 矩形特有属性:高
// 子类重写:计算矩形面积(覆盖父类的通用方法)
double calculateArea() {
return width * height; // 矩形专属面积公式
}
// 子类重写:绘制矩形(覆盖父类的通用方法)
void draw() {
cout << "正在绘制矩形:宽" << width << "×高" << height << ",";
showBaseInfo(); // 调用父类继承的方法
}
};
测试代码:
// 测试代码
int main() {
// 测试圆形类
Circle circle;
circle.x = 100; // 继承自Shape的属性
circle.y = 200; // 继承自Shape的属性
circle.color = "红色";// 继承自Shape的属性
circle.radius = 50; // 圆形特有属性
circle.draw(); // 调用子类重写的绘制方法
cout << "圆形面积:" << circle.calculateArea() << endl << endl;
// 测试矩形类
Rectangle rect;
rect.x = 300; // 继承自Shape的属性
rect.y = 150; // 继承自Shape的属性
rect.color = "蓝色";// 继承自Shape的属性
rect.width = 80; // 矩形特有属性
rect.height = 60; // 矩形特有属性
rect.draw(); // 调用子类重写的绘制方法
cout << "矩形面积:" << rect.calculateArea() << endl << endl;
// 测试父类本身(可选)
Shape baseShape;
baseShape.x = 50;
baseShape.y = 50;
baseShape.color = "黑色";
cout << "测试基础图形:";
baseShape.draw();
baseShape.calculateArea();
return 0;
}
运算结果如下:
根据上述的代码得知,子类中的圆形类和矩形类继承了父类图形Shape中所有的 public 属性和 public 方法,无需再重复定义即可直接使用
继承的关键特性
子类能继承父类的什么?
✅ 公有成员(public):子类可直接访问
✅ 保护成员(protected):子类内部可访问,外部不可访问
❌ 私有成员(private):子类无法直接访问
❌ 构造函数 / 析构函数:不会被继承,但子类构造时会先调用父类构造
总结
C++ 继承的核心是代码复用,用父类封装通用属性和方法, 子类专注于特有功能, 并为多态打下基础,下一章我们就聊聊多态
如果这篇文章对你有用的话,欢迎点赞收藏哦~