如果我有一个名为“A”的类,并且我有两个派生自它的类,请说“B”和“C”如何创建B和C的新实例,而不知道哪个是哪个。这可能听起来令人困惑,所以让我澄清并使用与我相似的代码。
基类:
class A {
stuff...
}
派生类:
class B : A{
stuff...
}
class C : A {
stuff...
}
然后在其他课程中我有:
class Z {
void Derp() {
foreach(A classA in listOfA's) {
create new instance of derived class
}
}
}
我根本不能只说B = new B()
和C = new C()
因为可能B根本不在列表中,或者列表中可能有三个B和一个A. Surly有一些方法可以做到,但如果没有,我可以有一个switch-case语句,如:
class Z {
void Derp() {
foreach(A classA in listOfA's) {
switch(classA) {
case is B:
B = new B();
break;
case is C:
C = new C();
break;
}
}
}
}
}
除非必要,否则我想避免这样做,因为每次我创建一个派生自A类的新类时,我都必须记住在那里添加另一个case语句。
那我该怎么做呢?
感谢。
答案 0 :(得分:0)
一个常见的C ++解决方案是所谓的virtual constructor idiom:你在基类clone
中定义一个名为A
的虚函数,然后在B
中覆盖它}返回B
的新实例并在C
中返回C
的新实例。
如果您需要空白实例而不是克隆,则可以添加使用默认构造函数的newInstance
函数。