问题描述:
我需要实现以下两个类:
class A1 {
common_method1();
common_method2();
foo1();
};
class A2 {
common_method1();
common_method2();
foo2();
};
foo1()和foo2()有不同的逻辑
foo1()和foo2()可能具有不同的参数和返回值
常用方法相同或具有相似的逻辑。
:定位: 实现能够生成A1或A2对象的工厂 调用factory :: create()后分别使用foo1()或foo2()方法生成对象的类型。
问题 如何在C ++ C ++ / CLI中实现这样的逻辑呢?
谢谢!
答案 0 :(得分:2)
我会创建一个实现常用功能的基类。然后使用继承来创建最终的类。
您的工厂可以返回指向基类的指针,该指针可以包含确定类型的方法。或者你可以根据需要输入它。
答案 1 :(得分:2)
我认为这绝对是一种标准的继承模式。创建一个基类Parent
,它实现common_method1
和common_method2
。创建继承自A1
。
A2
和Parent
如果您需要在common_method1
或common_method2
中的某个A1
或A2
方法中执行一些特殊的大小写,请创建方法virtual
Parent
。
分别foo1
和foo2
实施A1
和A2
。
编辑:如果我理解正确,你想创建一个返回Parent
类型引用(抽象类)的工厂。如果您希望始终foo1
A1
个对象和foo2
A2
个对象,只需在bar
界面中创建虚拟方法Parent
,在A1
中覆盖,只需拨打foo1
,并在A2
中覆盖,只需拨打foo2
。
答案 2 :(得分:0)
我不了解你的例子,我想你会想要创建一个包含常用方法的主类,然后将它们继承到几个基类。 然后你可以使用多态来调用foo1()或foo2()。 polymorphism上的此网站可能对您有所帮助,因为它使用的是经典的圆形/方形绘制()示例。
答案 3 :(得分:0)
您可能希望拥有一个层次结构:
#include <iostream>
struct A_Base {
// You can put your other common method here
virtual void common_method();
virtual ~A_Base();
}
struct A1 : A_Base {
void foo1();
};
struct A2 : A_Base {
void foo2();
};
struct Factory {
// I'm just using an int for the condition,
// but you can use anything
A_Base *CreateA(int i) {
if( i == 1 ) return new A1;
if( i == 2 ) return new A2;
}
};
int main()
{
Factory f;
// Create an object
A_Base *pb = f.CreateA(1);
A1 *pa1;
A2 *pa2;
// Run a common method
pb->common_method();
// Check the runtime type
// (not really necessary, but you might need it)
if( pa1 = dynamic_cast<A1*>(pb) ) {
pa1->foo1(); // Run the unique method
} else if ( pa2 = dynamic_cast<A2*>(pb) ) {
pa2->foo2(); // Or run the other unique method
}
// Delete the pointer
delete pb;
return 0;
}
是的,我在这附近使用RTTI;不是很好的练习,但您可能需要知道如何进行基础 - >衍生转换