如何将类继承为一个?
摘要:前言 类的继承是面向对象编程(OOP)的核心特性之一,核心价值在于 代码重用 和 逻辑分层,通过抽取不同对象的共性抽象为父类,子类基于父类扩展特有属性和方法,减少重复代码并提升框架稳定性。 类继承的核心概念 定义 类的继承是对对象概念的 纵
前言
类的继承是面向对象编程(OOP)的核心特性之一,核心价值在于 代码重用 和 逻辑分层,通过抽取不同对象的共性抽象为父类,子类基于父类扩展特有属性和方法,减少重复代码并提升框架稳定性。
类继承的核心概念
定义
类的继承是对对象概念的 纵向抽象模拟:将不同对象的共性属性/方法抽离为 父类(基类,Base Class),再通过 派生 生成 子类(派生类,Derived Class),子类自动拥有父类的非私有成员,同时可扩展自身特有成员。
核心优势
代码重用:无需重复编写父类已定义的共性逻辑
逻辑清晰:构建对象间的层级关系,符合现实世界认知
易于维护:修改父类共性逻辑时,所有子类自动受益
经典示例(现实世界抽象)
示例逻辑:猫、狗均属于哺乳动物,共性(体温、体重)抽象到 Mammal 父类,子类仅关注特有行为(喵喵叫、汪汪叫)。
继承的基本语法
语法格式
// 父类定义
class 父类名 {
// 成员属性 + 成员方法
};
// 子类继承语法:class 子类名 : 继承方式 父类名
class 子类名 : 继承方式 父类名 {
public:
// 子类构造函数(需显式调用父类构造函数)
子类名(参数列表) : 父类名(父类参数列表) {
// 子类初始化逻辑
}
// 子类特有属性 + 方法
};
实战示例(哺乳动物→猫/狗)
#include <iostream>
using namespace std;
// 父类:哺乳动物
class Mammal {
float heat; // 体温(共性属性)
float weight; // 体重(共性属性)
public:
// 父类构造函数(默认参数)
Mammal(float h = 0.0f, float w = 0.0f) : heat(h), weight(w) {}
// 父类共性方法
void showInfo() const {
cout << "体温:" << heat << "℃" << endl;
cout << "体重:" << weight << "kg" << endl;
}
// 【补充】提供访问私有成员的接口(供子类间接访问)
float getHeat() const { return heat; }
float getWeight() const { return weight; }
};
// 子类:狗(公有继承 Mammal)
class Dog : public Mammal {
public:
// 子类构造函数:显式调用父类构造函数
Dog(float h, float w) : Mammal(h, w) {}
// 子类特有方法
void bark() const {
cout << "汪汪!" << endl;
}
};
// 子类:猫(公有继承 Mammal)
class Cat : public Mammal {
public:
// 子类构造函数:显式调用父类构造函数
Cat(float h, float w) : Mammal(h, w) {}
// 子类特有方法
void miaow() const {
cout << "喵喵!" << endl;
}
};
// 测试代码
int main() {
Dog dog(38.5f, 20.0f);
cout << "=== 狗的信息 ===" << endl;
dog.showInfo(); // 继承自父类的方法
dog.bark(); // 子类特有方法
Cat cat(38.7f, 5.0f);
cout << "\n=== 猫的信息 ===" << endl;
cat.showInfo(); // 继承自父类的方法
cat.miaow(); // 子类特有方法
return 0;
}
三种继承方式与访问控制
继承方式决定了父类成员在子类中的 访问权限,核心是控制子类及子类对象对父类成员的访问范围。
