题目内容

描述老鼠吃水果。如果不同种类的老鼠吃不同种类的水果,有不一样的行为,例如:大老鼠吃苹果,洗完苹果后,再吃;小老鼠吃苹果,直接不吃,放弃;大老鼠吃香蕉,连皮带瓤都吃;小老鼠吃香蕉,只吃瓤;等等。那么在下面哪种情况下,只通过简单地继承和虚函数是无法适应上述要求的?

A. 老鼠只有一种,水果有香蕉和苹果两种,且香蕉只有一种,但苹果有多种
B. 老鼠只有一种,水果有香蕉、苹果等多种,但每种水果至多只有一个对象
C. 水果只有一种,老鼠有大老鼠、小老鼠等多种,但每种老鼠的最大数量限定为5个
D. 水果有多种,老鼠有大老鼠、小老鼠等多种,但每种老鼠至多只有一个对象

查看答案
更多问题

既然类有缺省的拷贝构造函数,那么定义虚拟拷贝构造函数一定有其特殊的目的和作用。下面的说法错误的是:

A. 拷贝构造子类对象时,使用普通拷贝构造函数必须明确指明类名,而使用虚拟拷贝构造函数则不必知道类名
B. 使用普通拷贝构造函数,拷贝不同类型的对象需要不同的访问接口,而使用虚拟拷贝构造函数,可以用一致的接口拷贝对象
C. 虚拟拷贝构造函数要求父类和子类都有一致的拷贝接口(如clone函数),但各子类的其它接口函数是可以不同的
D. 子类中定义了虚拟拷贝构造函数,那么应该禁用这个子类的拷贝构造函数,如可使用形如 SubClass(const SubClass&) = delete;的语句

class Fruit {public:virtual ~Fruit( ) {}virtual Fruit * clone( ) const = 0;//1};class Apple:public Fruit {public:virtual Apple * clone( ) const{ return new Apple(*this); }//2...//3};class Orange:public Fruit {public:virtual Orange * clone( ) const{ return new Orange(*this); }//4};下面的说法正确的是:

A. 将//2和//4中的类名Apple和Orange都改成Fruit也是可以的
B. 将//1中的virtual关键字去掉是可以的
C. 在//3处添加一个非虚的成员函数 void f(Fruit & fruit);是可以的
D. //1处的const以及子类中clone函数的const修饰都应该去掉

class Customer {public:virtual ~Customer( ) { }void buy( Car& car,CutOff * pcutoff ) {float percent = (pcutoff==nullptr?1:pcutoff->percent( ));card.reduce( car.value( ) * percent );goHome( );}/* 其它略 */private:virtual void goHome( );private:CreditCard card;};分析上边给出的Customer类定义及部分实现,针对下面给出的需求变化,说出Customer类不适应哪些?1. 增加轿车(Car)类的新子类轿跑车(Coupe),并且给Coupe类添加独特的行为-比赛(race).2. 变更折扣类(CutOff)的折扣率以及折扣的计算方法3. 更改买车(buy)的购买流程4. 更改goHome的具体方式5. 增加信用卡的新种类以及重置信用卡的最长还款期

A. 134
B. 245
C. 23
D. 35

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;请问,共有几个属于实现变化而不是接口变化?

A. 4
B. 5
C. 6
D. 7

答案查题题库