1.继承简介
2.继承的基本用法
3.核心规则:3 种继承方式
4.继承的核心特性
1.继承简介
继承(Inheritance)的核心作用是"让子类复用另一个类的属性和方法, 同时可以托追自己的专属功能"
a.父类(基类, Base Class): 定义通用的属性和方法
b.子类(派生类, Derived Class): 继承父类的所有通用特性, 同时添加自己的专属特性
没有继承的问题: 如果写猫鸟狗类, 每个类都要重复写体重, 移动, 代码冗余且难维护
有继承的优势: 只在动物父类写一次通用逻辑, 子类直接复用, 只需写自己的特有逻辑
2.继承的基本用法
1).基础语法结构
class 父类名 {
public:
};
class 子类名 : 继承方式 父类名 {
public:
};
2).示例
#include <iostream>
#include <string>
using namespace std;
class GameObject {
public:
int x, y;
string name;
GameObject(int x_, int y_, string name_) : x(x_), y(y_), name(name_) {}
void move(int dx, int dy) {
x += dx;
y += dy;
cout << name << "移动到(" << x << "," << y << ")" << endl;
}
};
class Player : public GameObject {
public:
int hp;
Player(int x_, int y_, string name_, int hp_) : GameObject(x_, y_, name_), hp(hp_) {}
void attack() {
cout << name << "发起攻击,剩余血量:" << hp << endl;
}
};
class Enemy : public GameObject {
public:
int damage;
Enemy(int x_, int y_, string name_, int damage_) : GameObject(x_, y_, name_), damage(damage_) {}
void chase(Player& player) {
cout << name << "追击" << player.name << ",攻击力:" << damage << endl;
move(player.x - x, player.y - y);
}
};
int main() {
Player player(10, 20, "勇士", 100);
player.move(5, 5);
player.attack();
Enemy enemy(0, 0, "怪兽", 20);
enemy.chase(player);
return 0;
}
3.核心规则:3 种继承方式
a.public 继承(最常用)
父类的public/protected成员, 在子类中保持原权限
b.protected 继承
父类的public成员会变成子类的protected(只能子类内部访问, 外部不可见)
c.private 继承
父类的所有成员在子类都变成private
4.继承的核心特性
a.构造
先调用父类构造函数 -> 再调用子类构造函数(先初始化继承的属性, 再初始化子类专属属性)
b.析构
先调用子类析构函数 -> 再调用父类析构函数