现有货币类、电子支付类,如下:class Currency { //货币public:virtual ~Currency( );voidexchange( );/* 其它略 */private:Country * mpCountry;};class EPay { //电子支付public:void pay( );/* 其它略 */private:Bank * mpBank;};小王定义数字货币类(Decp)时,考虑到Decp必须具备货币的全部功能,又有电子支付的全部功能,即Decp既可以当做货币用,也可以当做一种电子支付使用。现采用了多重继承的方式复用已定义的类,如下:class Decp:public Currency, public EPay { /* 略 */};但是,小王希望Decp类有更好的适应性,特别是对于EPay类,虽然现在没有子类,但未来一定会派生其它子类。那么最合理的定义方式是哪种?
A. class Decp:public Currency {public:voidexchange( );voidpay( ) { mpEPay->pay( ); }/* 构造、析构、拷贝、赋值等略*/private:EPay * mpEpay;};
B. class Decp:public EPay {public:voidexchange( ){ mpCurency->exchange( ); }voidpay( );/* 构造、析构、拷贝、赋值等略*/private:Currency * mpCurency;};
C. class IEPay {pubic:virtual ~IEPay( ) { }virtual void pay( ) = 0;};class EPay:public IEPay {/*略*/};class Decp:public Currency , public IEPay {public:voidexchange( );voidpay( ) { mpEPay->pay( ); }/* 构造、析构、拷贝、赋值等略*/private:IEPay * mpEpay;};
D. class IEPay {pubic:virtual ~IEPay( ) { }virtual void pay( ) = 0;};class EPay:public IEPay {/*略*/};class Decp:public Currency , public IEPay {public:voidexchange( );voidpay( );};
查看答案
当类A的成员函数需要传递T类型的参数时,常采用传引用的形式,如 void A::f( T& t);而不是传值对象形式,如 void A::f( T t );那么,下面给出的说明此问题的理由,错误的是:
A. 传值对象需要类T必须有拷贝构造函数
B. 传引用可以利用类T的动态多态性,增加类A的可复用性
C. 传值对象程序效率低,传引用程序效率高
D. 传值对象不要求类T有虚函数,但类T在大多数情况下是有虚函数的,因此常见传引用
已有Parent类,那么定义Parent类的子类Child时,错误的说法是:
A. Child类可以组合Parent类,同时又依赖Parent类
B. Child类可以依赖Parent类,同时又普通关联Parent类
Child类可以组合Parent类,同时又普通关联Parent类
D. Child类可以组合或依赖或普通关联Parent类,但不能同时存在两种或两种以上的关系
现欲开发一个基于人工智能的医学图像辅助诊断程序,其中的人工智能部分交给阿里巴巴的达摩院负责,而你只负责诊断程序的人工交互界面部分。若界面部分需要Analyzer类,并假设由你定义并实现,那么下面最合理的是:
A. class Analyzer {public:Analyzer( );void parse( Picture & pic) {mparser->parse( pic );}float getResult( ) {return mparser->result( );}}private:Parser * mparser;};
B. class Analyzer {public:Analyzer( );float parse( Picture & pic) {PNGPicture png = mparser->convertToPng(pic);return mparser->parseResult( png );}private:Parser * mparser;};
C. class Analyzer {public:void parse(Parser & psr, Picture & pic) {psr.parse( pic );}float getResult(Parser & psr ) {return psr.result( );}};
D. class Analyzer {public:float parse(Parser & psr, Picture & pic) {return psr.parseResult( pic );}};
王老师为了增加课堂效果,要开发一个“抽奖”程序。程序界面有一个抽奖盘(Board),盘中有多个抽奖条(Panel)。当学生选中某个抽奖条时,抽奖条显示各种奖罚,如“谢谢参与”,“免当天作业一次”,“背诵课文”,“抄写唐诗10首”等。那么下面最合理的设计方案是:
A. Board类组合多个Panel,Panel类中定义虚的show函数;Panel派生多种子类,各子类override Panel类的show函数,显示不同的内容。
Board类组合多个Panel,Panel类组合Content类;Content类派生多种子类,各子类负责返回不同的内容。同时,Panel类中定义非虚的show函数,显示Content的具体内容。
C. Board类组合多个Panel和多个Content;Panel派生多种子类,Content类也派生多种子类;不同的Panel子类根据不同的Content,通过虚函数show显示不同的内容。
D. Board类组合多个Panel,Panel类派生出Content类,Content类派生多种子类,各子类中的虚函数show负责显示不同的内容。