发贴娱乐一下
在Java版偶然看到这样的题,挺好玩的,拿出来大家做一做,就当成散散心~
1.
有A,B两个类,其中A类有方法m1、m2、m3、m7、m9,B类有方法m1、m2、m3、m4、m5。
注:A类的m1,m2,m3和B类的方法同名,同功能。
问题:现在将会有一个C类要使用到m1,m2,m3和A类的m7及B类的m4方法,请写出你的想法或怎么操作(或者说在A与B功能不变时优化一下类结构)?
2.
顺便也聊一下
2.1在项目中如何使用抽象类与接口的
2.2什么情况下使用哪种设计模式比较干练...
[解决办法]
- Delphi(Pascal) code
#include <iostream>using namespace std;class A {public: void M1(){std::cout<<"M1"<<endl;} void M2(){std::cout<<"M2"<<endl;} void M3(){std::cout<<"M3"<<endl;} void M7(){std::cout<<"m7"<<endl;}protected:private:};class B{public: void M1(){std::cout<<"M1"<<endl;} void M2(){std::cout<<"M2"<<endl;} void M3(){std::cout<<"M3"<<endl;} void M4(){std::cout<<"m4"<<endl;}protected:private:};class AB: public A, public B{public:protected:private:};int main(){ AB *test = new AB; test->A::M1(); test->B::M1(); test->M4(); delete test; return 0;}
[解决办法]
C是一合,采用委托接口
- Delphi(Pascal) code
IMethod = Interface procedure m1; procedure m2; procedure m3;end;IA = Interface procedure m4; procedure m5;end;IB = Interface procedure m7; procedure m9;end; TExample=class(TInterfacedObject,IExample) private //子类共用的数据成员 public procedure M1;virtual; procedure M2;virtual; procedure M3;virtual; procedure other;virtual;abstract; end; TExampleA(TExample,IA) public procedure M4; procedure M5; end; TExampleB(TExample,IB) public procedure M7; procedure M9; end; TExampleC(TExample,IA,IB) private FA: IA; FB: IB; public constructor Create; property ExampleA: IA read FA implements IA; property ExampleB: IB read FB implements IB; end;implement ....constructor TExampleC.Create; begin FA:= TExampleA.Create; FB:= TExampleB.Create;end;
[解决办法]
写个玩玩,不过可能不是很合题意
- Delphi(Pascal) code
type TCustomFuncArgs = class(TObject); TM1FuncArgs = class(TCustomFuncArgs); TM2FuncArgs = class(TCustomFuncArgs); TM3FuncArgs = class(TCustomFuncArgs); TM1FuncArgs = class(TCustomFuncArgs); TM4FuncArgs = class(TCustomFuncArgs); TM5FuncArgs = class(TCustomFuncArgs); TM7FuncArgs = class(TCustomFuncArgs); TM9FuncArgs = class(TCustomFuncArgs);
[解决办法]
[解决办法]
类里放2个对象的做法,可能有问题
因为对象的数据也成了孤立的2、3套
TC = class
private
FA: TA;
FB: TB;
public
constructor Create;
destructor Destroy; override;
procedure m1;
procedure m4;
procedure m7;
end;
TC = class(TA)
private
FB: TB;
public
constructor Create;
destructor Destroy; override;
procedure m4;
end;
[解决办法]
com对象本身是不能继承的(虽然本身是一个"类"),只能继承接口.
所以只能是委托一个现成的com对象.也是比较常见的.
而现实的代码中,是可以很方便进行继承的,并且有源代码,所以没有必要去"委托".
如果没有a,b源代码的话又另当别论.