<> C++中的多态性依赖指针。你知道吗</p>
<p>如果你有一个基类Poly,然后是子类Polya,Polyb,Polyi。。等。
你可以有一个<code>Poly*</code>实际指向一个<code>Polya*</code>,但是你不能有一个<code>Poly</code>包含一个<code>Polya</code>,因为你将面对类型切片。你知道吗</p>
<p>所以你可以有这样的东西:</p>
<pre><code>class Poly_base
{
public:
Poly_base(string type, int N) {
// Potentially do stuff that you do on ALL poly
}
virtual complex<double> poly(complex<double> *z) = 0;
}
class Polyi : public Poly_base
{
public:
Polyi(string type, int N):
Poly_base(type, N)
{
// Stuff you would do only on Polyi.
}
virtual complex<double> poly(complex<double> *z)
{
// Your calculation for Polyi.
}
}
</code></pre>
<p>注意<code>virtual</code>关键字。这说明:在我的基类上有一个方法,可以在子类上重新实现。
如果在实际指向<code>Polya</code>实例的<code>Poly_base*</code>指针上调用poly,则将调用重新实现的版本。(通过vtables的魔力)</p>
<p>然后主要是:</p>
<pre><code>Poly *polynomial;
if (some_condition) {
polynomial = new Polya(type, N);
} else if (some_other_condition) {
polynomial = new Polyi(type, N);
}
polynomial->poly(z);
</code></pre>
<p>编辑:您可能希望您的类型是枚举而不是字符串,因此可以对其执行switch语句,如下所示:</p>
<pre><code>enum PolyType {
polya = 0,
polyb,
polyi
}
Poly_base *polynomial;
switch (type) {
case polya:
polynomial = new Polya(type, N);
break;
case polyb:
polynomial = new Polyb(type, N);
break;
case ....
}
</code></pre>
<p>EDIT2:您可能也不需要类构造函数中的类型。。这个体系结构的要点是,这些信息包含在您实际创建的实例中。如果你创建了一个Polya,那么它“知道”它是Polya而不是Polyb。你知道吗</p>