假设我在C++中有以下类层次结构:
class AbstractBaseClass
{
public:
// Note: Class is completely abstract! No data!
AbstractBaseClass() {}
virtual ~AbstractBaseClass() {}
virtual std::string definedInVirtual() = 0;
virtual std::string definedInDerived() = 0;
};
class Virtual : public virtual AbstractBaseClass
{
public:
Virtual() {}
virtual ~Virtual() {}
std::string definedInVirtual()
{
return "definedInVirtual";
}
};
class DerivedA : public Virtual
{
public:
DerivedA() {}
virtual ~DerivedA() {}
std::string definedInDerived()
{
return "definedInDerivedA";
}
};
class DerivedB : public Virtual
{
public:
DerivedB() {}
virtual ~DerivedB() {}
std::string definedInDerived()
{
return "definedInDerivedB";
}
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,要求definedInVirtual()在任DerivedA或者DerivedB,定义definedInVirtual()上Virtual被调用,通过交叉授权.这是一种代码重用的形式.
这种方法有什么缺点?在这种情况下,有没有更好的方法来实现代码重用?
编辑:
我问的主要原因是有一个非常庞大的类,有人通过继承来编写代码重用计划(他后悔这样做,但是类很大),由于添加了一个新的ABC而被超级分类装饰器从新ABC派生到对象层次结构.我需要向新的ABC添加需要由DerivedA和DerivedB处理的方法,以及装饰器通过调用ABC的内部实例来处理.我的想法是使用上述技术......
代码重用应该通过组合而不是继承来实现.虚拟继承很慢且非常混乱,几乎所有设计都应该避免.
| 归档时间: |
|
| 查看次数: |
1440 次 |
| 最近记录: |