读书人

发贴娱乐一下,该如何解决

发布时间: 2012-03-21 13:33:14 作者: rapoo

发贴娱乐一下
在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);
[解决办法]
探讨
A和B类是一开始就设计好的还是要你自己设计?,看你题目象是A,B类已经成型了,
但是看你代码A,B类还没成型

[解决办法]
类里放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源代码的话又另当别论.

读书人网 >.NET

热点推荐