大一上 程设期末考
总的来说,还是没有发挥好,做得太慢。
T1、T2 各自做了一个多小时,到第三题只剩下十几分钟。
然后,题意的理解又太慢。不像其他同学,能够在十分钟内 rush 出一份双向链表。
T1:70pts,剩下CE* 2+RE+MLK
手写的 动态数组类,还是不够熟练。只是看书复习,没有实操。
- 这一题是模板类,成员 class T 的比较,只能用 ==。如果用 != 就要重载
- 在复制构造函数 /
operator= 的重载中,要把原本数组的空间 delete 掉,再进行复制。而且复制的时候,要新开一个动态数组(new),而不能直接赋值头指针。
T2:61pts,剩下 WA
题面是炉石传说的佣兵模式(exciting),白瞎了2年炉石云玩家。
-
我竟然认为,A 把 B 踢死,就不会受到 B 的伤害?!
把这个多余的else删掉,就可以AC了。QWQ
-
奇怪的攻击结算(和原本的佣兵模式不大一样)
防守方收到的伤害,等于攻击方的 attack 减去防守方的 attack,同时如果结果为负数,就直接改成0(
显然不可能越减越多) -
用 静态成员变量 来充当全局变量。能够被 所有同类的对象 共享。
int Base::aliveNumber = 0;//在类声明的外面,赋初值 class Base { static int aliveNumber; static int Query(){//只能用静态成员函数来访问 return aliveNumber; } } -
用 动态类型转换 来判断,基类指针指向哪一个派生类。
//Base是基类,而Fighter是派生类。 //在main函数中有如下语句:Base *target = new Fighter; class Base { virtual void launch_attack(Base *target) {} //虚函数,会在每个派生类中重新定义 } class Fighter : public Base { void launch_attack(Base *target) {//原型必须相同 //...... if (dynamic_cast<Fighter *>(target)) std::cout << "Fighter "; //把target指针转换为一个指向Fighter的指针。 //如果转换成功,说明target本来就指向一个Fighter对象 //否则转换失败,会返回NULL,说明target不指向Fighter } } -
虚函数的定义和使用。