gpt4 book ai didi

c++ - 通过继承和交叉委托(delegate)实现代码重用

转载 作者:行者123 更新时间:2023-11-30 00:59:13 24 4
gpt4 key购买 nike

假设我在 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";
}
};

在这种情况下,在 DerivedADerivedB 上调用 definedInVirtual()definedInVirtual() 的定义> 在 Virtual 上被调用,通过交叉委托(delegate)。这就是一种代码重用形式。

这种方法有什么缺点?在这种情况下,是否有更好的方法来实现代码重用?

编辑:

我问的主要原因是有人开发了一个非常大的类,计划通过继承重用代码(他后悔这样做了,但这个类很大)被新的 ABC super 分类将派生自新 ABC 的装饰器添加到对象层次结构中。我需要向需要由 DerivedA 和 DerivedB 处理的新 ABC 添加方法,并让装饰器通过调用 ABC 的内部实例来处理。我的想法是使用上面的技术...

最佳答案

代码重用应该通过组合而不是继承来实现。虚拟继承速度慢且极其困惑,几乎在所有设计中都应避免。

关于c++ - 通过继承和交叉委托(delegate)实现代码重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4821612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com