11. 继承

1.继承简介

2.继承的基本用法

3.核心规则:3 种继承方式

4.继承的核心特性


1.继承简介

继承(Inheritance)的核心作用是"让子类复用另一个类的属性和方法, 同时可以托追自己的专属功能"

a.父类(基类, Base Class): 定义通用的属性和方法

b.子类(派生类, Derived Class): 继承父类的所有通用特性, 同时添加自己的专属特性

没有继承的问题: 如果写猫鸟狗类, 每个类都要重复写体重, 移动, 代码冗余且难维护

有继承的优势: 只在动物父类写一次通用逻辑, 子类直接复用, 只需写自己的特有逻辑

2.继承的基本用法

1).基础语法结构

// 1. 定义父类(基类)
class 父类名 {
public:
    // 父类的属性和方法
};

// 2. 定义子类(派生类):继承父类
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;
    }
};

// 子类1:玩家(继承GameObject,扩展专属功能)
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;
    }
};

// 子类2:敌人(继承GameObject,扩展专属功能)
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); // 复用父类的move方法
    }
};

// 测试代码
int main() {
    // 创建玩家对象
    Player player(10, 20, "勇士", 100);
    player.move(5, 5); // 复用父类的move方法
    player.attack();   // 调用子类专属方法

    // 创建敌人对象
    Enemy enemy(0, 0, "怪兽", 20);
    enemy.chase(player); // 调用子类专属方法,内部复用move

    return 0;
}

3.核心规则:3 种继承方式

a.public 继承(最常用)

父类的public/protected成员, 在子类中保持原权限

b.protected 继承

父类的public成员会变成子类的protected(只能子类内部访问, 外部不可见)

c.private 继承

父类的所有成员在子类都变成private

4.继承的核心特性

a.构造

先调用父类构造函数 -> 再调用子类构造函数(先初始化继承的属性, 再初始化子类专属属性)

b.析构

先调用子类析构函数 -> 再调用父类析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值