C++ 方法的oop继承与使对象仅在调用它的类中调用方法
我对judge witch的方法有问题,它从设计上来说更好,干净的代码==良好的实践 我从程序启动时的文件中加载了一些数据,类的结构如下所示: 更具体地说,C++ 方法的oop继承与使对象仅在调用它的类中调用方法,c++,oop,inheritance,single-responsibility-principle,C++,Oop,Inheritance,Single Responsibility Principle,我对judge witch的方法有问题,它从设计上来说更好,干净的代码==良好的实践 我从程序启动时的文件中加载了一些数据,类的结构如下所示: 更具体地说,IngredientFromXmlReader,PizzaReader,DrinksFromXmlReader在内部完成所有工作,而不从DataFromFileLoader中插入任何数据 问号是如何使用DataFromFileLoader类,它应该继承自PizzaReader,IngredientFromXmlReader,DrinksFro
IngredientFromXmlReader
,PizzaReader
,DrinksFromXmlReader
在内部完成所有工作,而不从DataFromFileLoader
中插入任何数据
问号是如何使用DataFromFileLoader
类,它应该继承自PizzaReader
,IngredientFromXmlReader
,DrinksFromXml
,并具有如下方法loadMenuFromFiles
:
private void loadMenuFromFiles()
{
this->loadIngredientsFromXml();
this->loadPizzasFromXml();
this->loadDrinksFromXml();
}
这种方法:
- 对我来说看起来更干净
- 不要创建不需要的对象
- 和DataFromFileLoader相比,第二种方法看起来更拥挤,因为方法是在父类中实现的
loadXml()
,这是AbstractReaderFromXml
的虚拟方法。然后我创建一个调用方法的对象
private void loadMenuFromFiles()
{
IngredientFromXmlReader ingreRead;
ingreRead.loadXml();
PizzaReader pizzaRead;
pizzaRead.loadXml();
DrinksFromXmlReader drinksRead;
drinksRead.loadXml();
}
我为什么选择这个:
- 更坚持单一责任原则,责任更分离,优势何在
- 我没有机会在不需要的地方调用这个方法,因为我需要object来调用它
我觉得这个问题中的问题描述不清楚。但我强烈建议在这种情况下不要继承钻石
继承演示了IS-A连接。在我看来,
PizzaReader
实际上不像FileOpener
PizzaReader
使用FileOpener
打开文件,对吗?这意味着这是一个很好的例子;TL;你没有听说过C++中应该避免的吗?@ 101010是的,我听说,但是如果我想继承这3个链接,我就不在类ActudiTraveReDeXML中制作任何虚拟方法。因此,它看起来像是在类IngredientFromXmlReader中加载RedietNSFromXML的方法,而不是这种虚拟构造loadXml@101010Thx是一个很好的论据,第二个选项比第一个更好。DR和TL的意思是什么?如果我只是链接代码,可能会更好。你说得对,PizzaReader使用FileOpener的方法,thx需要帮助,我将重构我的代码。@MyWay欢迎你。不要忘记,如果答案对您有帮助,您可以在此处将其标记为已接受。