2

我正在尝试开发一组控件,它们在大小方面都有许多共同的行为。我认为这是一个需要多重继承的例子(尽管我完全愿意接受任何相反的建议)。我想做的基本上是一个mixin模式

class Sizable {        
    ...
    public:
        ResizeMe();
        ResetText();
        ...
};

class sizeButton : public Sizable, public TButton {
...
};

class sizeEdit : public Sizable, public TEdit {
...
};

等等……

我已经在 Sizable 类中编写了大量的大小调整代码并对其进行了测试,这很好,但现在我已经列出了结构的其余部分(是的,我可能应该首先为这些类编写一个骨架)并且有遗憾地发现:

[BCC32 Error] szButton.h(15): E2278 Multiple base classes not supported for VCL classes

我已经删除了所有不需要成为成员函数的函数(例如测量字符串的长度),但是仍然有很多函数是不可能的。

有没有人有任何设计建议,这样我就不必复制大量代码?

4

2 回答 2

3

Delphi(以及因此主要用 Delphi 编写的 VCL)不支持类的多重继承。但是,从 v6 开始,当 VCL 类用作祖先时,它确实支持接口的多重继承,例如:

// must be a pure virtual class with no data members
// and no implementation of its own...
class Sizable
{
public:
    virtual void ResizeMe() = 0;
    virtual void ResetText() = 0;
    ...
};

class sizeButton : public TButton, public Sizable
{
public:
    virtual void ResizeMe();
    virtual void ResetText();
    ...
}; 

class sizeEdit : public TEdit, public Sizable
{
public:
    virtual void ResizeMe();
    virtual void ResetText();
    ...
}; 
于 2009-11-04T01:44:58.233 回答
0

为什么不创建TButton一个成员(组合)而不是从它继承?

于 2009-10-30T01:01:48.507 回答