class A {public:virtual ~A( ) { }virtual void f( ) {//1...//2}void g( ) {//3...//4}....//5private:void h( ){//6...//7}private:intmx;//8....//9};对于下面给出的变化:1. 更改//1的原型为virtual void f( int );2. 修改//2中的既有代码3. 更改//3的原型为 void g( int );4. 修改//4中的既有代码5. 在//5处添加新成员函数 void k( ) const ;6. 更改//6的原型为 void h( int );7. 修改//7中的既有代码8. 更改//8中mx的类型为float9. 在//9处添加新的数据成员 int num;请问,共有几个属于实现变化而不是接口变化?
查看答案
class Wepon {public:virtual ~Wepon( ) { }virtual int attack( ) const =0;};class Horse {public:virtual ~Horse( ) { }virtual int speed( ) const =0;};class Ultraman {public:void fight(Monster& m,Wepon & w, Horse& h) {int v1 = w.attack( );int v2 = h.speed( );/*其它略*/}};已知:会有多种类型的Wepon,各种Wepon攻击力的计算方法和数值都不一样;会有多种类型的Horse,各种Horse的速度的计算方法和数值都不一样;现希望重新定义Ultraman类,并仍能适应Wepon和Horse的变化,那么下面的定义,哪个是可以的?
A. class Ultraman {public:Ultraman(Horse & horse):mh(horse) { }void fight(Monster& m,Wepon & w) {int v1 = w.attack( );int v2 = mh.speed( );/*其它略*/}private:Horse mh;};
B. class Ultraman {public:Ultraman(Wepon& w):mw(&w) { }void fight(Monster& m,Horse & h) {int v1 = mw->attack( );int v2 = h.speed( );/*其它略*/}private:Wepon * mw;};
C. class Ultraman {public:void fight(Monster& m) {int v1 = mw.attack( );int v2 = mh.speed( );/*其它略*/}private:Horse mh;Wepon mw;};
D. class Ultraman:public Wepon {public:void fight(Monster& m,Horse & h) {int v1 = attack( );int v2 = h.speed( );/*其它略*/}};
现要开发一个模拟“飞行棋”的游戏。每个玩家"飞行"时,先通过掷骰子(Dice)决定前进几步,然后再移动。考虑到当前还处于游戏早期开发阶段,那么下面哪个Player类的设计和实现最合适?
A. class Player {public:virtual ~Player( ) { }virtual void play( Dice & aDice ) {int steps = aDice.cast( );...}};
B. class Player {public:virtual ~Player( ) { }virtual void play( ) {int steps = Dice::getInstance( ).cast( );...}};
C. class Player {public:virtual ~Player( ) { }virtual void play( ) {int steps = sDice.cast( );...}private:static Dice sDice;};
D. class Player {public:virtual ~Player( ) { }virtual void play( ) {int steps = DiceManager::getDice( ).cast( );...}};
E. class Player {public:virtual ~Player( ) { }virtual void play( ) {int steps = mDice.cast( );...}private:Dice mDice;};
类A中有数据成员 T * p[3];,那么下面关于T的类型的说法,有几个是正确的?1. T 可以是 A.2. T 可以是A的祖先类.3. T 可以是具体类,也可以是抽象类.4. T 可以是A的其它子类.5. T 可以是内置类型,也可以是自定义的类.6. T 可以是自定义类C,也可以是 C *.
A. 3
B. 4
C. 5
D. 6
在定义类A的非静态成员函数func时,有时需要定义成虚的,有时又需要定义成非虚的。那么,关于什么时候定义成虚函数的说法,错误的是:
A. 若类A有可能派生其它子类,无论func是否为虚的,类A中都应定义虚的析构函数
B. 若类A继承自一个接口类,那么类A的func函数就应定义成虚的
C. 若需要类A的后裔类也具有func行为,但其行为过程不同于类A,那么类A的func函数应定义成虚的
D. 若类A本身就是一个接口类,那么那么类A的func函数应定义成虚的