记一次边锋面试

游戏公司C++面试回忆:从基础到深入
本文记录了一位大三电子专业学生在游戏公司的C++面试经历,包括填表环节的基础题目和技术面试中关于C++特性的讨论,如多态、内存泄漏及算法题的解答。面试过程既包含对简历项目经验的询问,也有对快速排序等经典算法的深入探讨。

大三电子专业第一次去面试c++岗位,还是游戏公司,专业差还是有点大的而且面试让我记忆尤新,so来记录一次。

填表

首先是个人信息记录表,如果面试技术岗还会有一份面试题,有几道比较基础的选择题,然后有一道lambda的编程题,逻辑题,内存泄漏的经历,还有就是 cocos2d 的使用经历和题目。虽说这个对后面的面试没什么影响。

技术面

和我一起去的同学技术面特别快,也比较简单,但是我就面了一个多小时,相当的煎熬。。首先是看简历来问你项目经历,这个只要项目是自己做的基本没什么问题,都能答的出来。
之后是 c++ 的题目,三个特性,多态是什么,比较基础,然后问了重写的情况。

class A
{
public:
    void show()
    {
        cout << "A" << endl;
    }
};
class B : public A
{
public:
    void show()
    {
        cout << "B" << endl;
    }
};
int main()
{
    B b;
    A *a = &b;
    a->show()
<think>好的,我现在需要帮用户根据提供的冰球比赛规则设计一个包含球员角色和比赛机制的类图。首先,我得仔细看看用户给的引用内容,特别是引用[1]里的冰球队组成和各个角色的职责。用户提到的角色有中锋、守门员、边锋、后卫,每个角色有不同的任务,比如中锋负责传球,边锋射门,后卫防守,守门员守门。 接下来,我需要把这些角色转化为类图中的类。每个角色应该是一个类,比如Player作为基类,然后中锋、守门员、边锋、后卫作为子类继承Player。这样设计可以体现继承关系,符合向对象的原则。然后,每个子类可能会有自己的属性和方法,比如守门员可能有救球次数的方法,边锋有射门技术属性。 然后,球队的组成结构。引用里提到一支冰球队由一名中锋、一名守门员、两名边锋和两名后卫组成。这里可能需要组合关系,比如Team类包含这些角色的实例,数量要符合要求。组合关系用实心菱形箭头表示,比如Team类里有1个中锋、1个守门员、2个边锋和2个后卫的成员变量。 接下来是比赛机制,比如得分和救球。得分可能和射门动作相关,救球是守门员的行为。可能需要一个Game类来管理比赛流程,录得分。这里Game类可能与Team类和Player类有关联,比如录得分的方法,或者处理射门和救球的交互。 还要考虑类之间的关系。比如中锋将球传给边锋,这里可能有传递的方法,但可能不需要在类图中详细画出方法调用,而是用关联关系表示协作。或者是否需要接口?比如射门和救球作为接口方法,由不同角色实现。 需要确保类图的正确性,比如继承用空心三角箭头,组合用实心菱形,关联用普通箭头。属性如边锋的射门技术,可以设为属性,比如shootingSkill: int。方法比如shoot(), defend(), save()等。 可能还需要考虑约束条件,比如球队成员的个数,比如在Team类旁边用注释说明组成规则,或者使用构造型来标注数量限制。 现在,把这些整理成类图的结构。基类Player,子类Forward(中锋)、Goalkeeper、Winger(边锋)、Defender。Team类包含这些类的实例,数量正确。Game类关联到Team,处理得分和比赛流程。 可能需要关联关系,比如Forward和Winger之间的传球关联,或者Game和Team之间的比赛进行关联。方法上,比如Winger有shoot()方法,Goalkeeper有save()方法,Game有recordGoal()方法。 还要注意引用中的术语,比如得分是to score a goal,救球是守门员的职责。可能需要将得分作为Game的属性,每次射门成功,Game的得分增加。 最后,检查是否符合类图的标准,是否所有关系和属性都正确表示,有没有遗漏的角色或方法。可能需要再参考引用中的其他运动类词汇,但冰球的具体机制已经足够在引用[1]中找到。</think>根据冰球比赛规则设计类图时,需要从**角色结构**和**比赛机制**两个维度进行建模。以下是逐步设计建议: --- ### 一、类图设计步骤 #### 1. 角色类定义(继承关系) ```plantuml @startuml class Player { +name: String +position: String +passBall(): void } class Center { +createPlay(): void } class Goalkeeper { +saveGoal(): boolean } class Winger { +shootingSkill: int +shoot(): boolean } class Defender { +intercept(): void } Player <|-- Center Player <|-- Goalkeeper Player <|-- Winger Player <|-- Defender @enduml ``` - **基类** `Player` 定义公共属性(姓名、位置)和行为(传球) - **子类** 通过继承扩展角色特有功能,如守门员的`saveGoal()`、边锋的`shootingSkill`属性[^1] #### 2. 球队组成结构(组合关系) ```plantuml @startuml class Team { -center: Center -goalkeeper: Goalkeeper -wingers: Winger[2] -defenders: Defender[2] +score: int } Team *-- Center Team *-- Goalkeeper Team *-- Winger Team *-- Defender ``` - 组合关系体现冰球队的固定结构(1中锋、1守门员、2边锋、2后卫)[^1] - `score` 属性录球队得分 #### 3. 比赛机制关联(依赖关系) ```plantuml @startuml class Game { +startMatch(): void +endMatch(): void +recordGoal(team: Team): void } class Team Game --> Team : manages Center --> Winger : passes to Winger --> Goalkeeper : shoots on Defender --> Winger : intercepts @enduml ``` - `Game` 类控制比赛流程和得分录 - 角色间协作通过依赖箭头表示(如中锋传球给边锋) --- ### 二、完整类图示例 ```plantuml @startuml class Player { +name: String +position: String +passBall(): void } class Center { +createPlay(): void } class Goalkeeper { +saveGoal(): boolean } class Winger { +shootingSkill: int +shoot(): boolean } class Defender { +intercept(): void } class Team { -center: Center -goalkeeper: Goalkeeper -wingers: Winger[2] -defenders: Defender[2] +score: int } class Game { +startMatch(): void +endMatch(): void +recordGoal(team: Team): void } Player <|-- Center Player <|-- Goalkeeper Player <|-- Winger Player <|-- Defender Team *-- Center Team *-- Goalkeeper Team *-- Winger Team *-- Defender Game --> Team : manages Center --> Winger : passes to Winger --> Goalkeeper : shoots on Defender --> Winger : intercepts @enduml ``` --- ### 三、关键设计说明 1. **角色职责分离**:通过继承实现多态,各角色仅暴露必要接口(如守门员不需射门方法) 2. **组合约束**:`Team` 类通过成员变量严格限制角色数量,符合现实规则 3. **得分机制**:得分由`Game.recordGoal()`触发,关联到具体球队对象 4. **协作流程**:中锋与边锋的传球、边锋与守门员的射门/扑救形成闭环交互 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值