以下是C ++中的有效设计吗?
#include <iostream>
#include <memory>
using namespace std;
struct Base {
virtual void SomeMethod() {
std::cout<<"Do Something"<<std::endl;
}
};
struct Der : public Base {
virtual void SomeMethod() override = 0;
};
struct DerDer : Der {
virtual void SomeMethod() override
{
std::cout<<"Do something derived."<<std::endl;
}
};
int main(int argc, char *argv[])
{
auto x = std::unique_ptr<Base>(new DerDer);
x->SomeMethod();
return 0;
}
适用于g ++ 6.2。
我从普通类派生,将该方法转换为抽象,然后在再次派生后重写它。
从C ++派生类是否正确,然后将实现的方法转回抽象?
我需要这样做的原因是,在我要添加功能的大型程序中,我试图avoid a diamond model。为此,我计划将所有常用方法放在类Der
中,并使所有内容继承自它,而不会弄乱Base
类。
答案 0 :(得分:1)
那是合法的。
但是如果你想避免使用diamon模型,那就有another workarounds
答案 1 :(得分:-1)
答案 2 :(得分:-1)
从技术上讲,没有任何问题,但从具体类继承接口(或抽象类)时,它永远不是一个好的设计。
如果要在Der中提供一些常用功能,可以使用合成。因为你的类Der就像一个实用程序类。不要将der class作为抽象类。
Class DerDer : class base
{
private der ptrUtilityObj;
}
将来可能会有一些新的开发人员会混淆他应该在Base类或Der类中引入新功能。