MST

星途 面试题库

面试题:C++ 多态在大型项目架构中对代码扩展性的影响

在一个大型游戏开发项目中,有多种不同类型的游戏角色,如战士、法师、刺客等,每个角色都有自己独特的攻击、防御等行为。请描述如何基于C++多态性来设计角色类体系,以确保在后续添加新角色类型(如治疗者)时,对原有代码的修改最小化,并分析多态在这种大型项目架构下,从代码复用、维护成本和扩展性方面的优势。
49.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

基于C++多态性设计角色类体系

  1. 定义基类: 定义一个基类 Character,包含一些公共的属性和纯虚函数,例如:
class Character {
public:
    virtual void attack() = 0;
    virtual void defend() = 0;
};
  1. 派生具体角色类: 对于战士、法师、刺客等具体角色,从 Character 类派生,并实现基类的纯虚函数。
class Warrior : public Character {
public:
    void attack() override {
        // 实现战士的攻击行为
    }
    void defend() override {
        // 实现战士的防御行为
    }
};

class Mage : public Character {
public:
    void attack() override {
        // 实现法师的攻击行为
    }
    void defend() override {
        // 实现法师的防御行为
    }
};

class Assassin : public Character {
public:
    void attack() override {
        // 实现刺客的攻击行为
    }
    void defend() override {
        // 实现刺客的防御行为
    }
};
  1. 添加新角色类: 当需要添加新角色(如治疗者)时,同样从 Character 类派生,并实现相应的函数。
class Healer : public Character {
public:
    void attack() override {
        // 实现治疗者的攻击行为(可能很弱或者有特殊效果)
    }
    void defend() override {
        // 实现治疗者的防御行为
    }
};

多态在大型项目架构下的优势

  1. 代码复用
    • 基类 Character 可以包含所有角色共有的属性和方法,减少重复代码。例如,所有角色可能都有生命值、等级等属性,这些可以放在基类中。
    • 派生类只需要专注于实现自己独特的行为,如攻击和防御方式,通过继承复用了基类的代码结构和通用属性。
  2. 维护成本
    • 当需要修改某个角色的行为时,只需要在对应的派生类中修改,不会影响其他角色类。例如,如果要调整战士的攻击伤害,只需要修改 Warrior 类中的 attack 函数,对法师、刺客等其他角色无影响。
    • 对于公共的功能修改,如在基类中添加新的通用属性或方法,所有派生类会自动继承这些修改,减少了逐个修改每个角色类的工作量。
  3. 扩展性
    • 正如前面添加治疗者角色所示,添加新角色类型非常方便。只需要从 Character 类派生并实现相应的纯虚函数,对原有代码的修改最小化。
    • 可以轻松地将新角色融入到整个游戏系统中,例如在角色管理模块中,可以通过基类指针或引用来处理不同类型的角色,无需为新角色单独编写大量的管理代码。