Pointers C++;指针向量中的多变形方法问题

Pointers C++;指针向量中的多变形方法问题,pointers,methods,vector,polymorphism,Pointers,Methods,Vector,Polymorphism,首先,我很抱歉我的英语不好,我不是英国人=/ 我有一个指向基类a的指针向量,它由类B和C填充。 B和C是来自A的多态类,它们只有一个方法setTest()。 现在我想通过向量从B/C调用一个方法: vector (A*) vec; vec.push_back(new classB()); vec.push_back(new classC()); for(int i=0;i<3;++i) vec[i]->setTest(true); 向量(A*)向量; 向量推回(新类b()

首先,我很抱歉我的英语不好,我不是英国人=/

我有一个指向基类a的指针向量,它由类B和C填充。 B和C是来自A的多态类,它们只有一个方法setTest()。 现在我想通过向量从B/C调用一个方法:

vector (A*) vec;
vec.push_back(new classB());
vec.push_back(new classC());

for(int i=0;i<3;++i)
    vec[i]->setTest(true);
向量(A*)向量; 向量推回(新类b()); 向量推回(新类c()); for(int i=0;isetTest(真); 但是编译器说我的基类A中没有setTest()方法。 有什么办法可以解决这个问题吗?

因为编译器“思考”处理A,所以它不能推断出方法
setTest
存在

要解决此问题,可以执行以下操作:

将抽象方法添加到:

 virtual void setTest(bool value) = 0;
更新

还有另一种方法。让我们只使用一种方法创建助手接口D:

 struct D
 {
     virtual void setTest(bool value) = 0;
 };
而不是使用B和C的多重继承更改签名:

class B : public A, public D
{
     virtual void setTest(bool value)
     {
         //your impl goes here...
     }
};

//do the same with impl of C
最后,让我们更改迭代:

for(int i=0;i<3;++i)
    ((D*)vec[i])->setTest(true);
for(int i=0;isetTest(true);
简单强制转换允许调用预期的方法。但是!!!如果vector可以包含一个实例,那么它将失败,因此使用动态强制转换有助于:

for(int i=0;i<3;++i)
{
     D *check_inst = dynamic_cast<D*>(vec[i]);
     if( check_inst)
        check_inst->setTest(true);
}
for(int i=0;isetTest(true);
}

是在类A中声明的虚拟void setTest(bool)吗?我们能看到更多的代码吗?(最好是失败的最小数量…)不,它必须是吗?这是一个例子的一部分,在这个例子中,方法被严格给定了类D的更多代码,失败发生的地方:#包括“B.h”#包括“C.h”#包括使用命名空间std;D::D(void){vector(A*)vec;vec.push_-back(new classB());vec.push_-back(new classC());for(int i=0;isetTest(true);}您还想要什么吗?应该是
vector
,对吗?我假设没有添加方法(如果是抽象的或不是抽象的)就没有其他方法可以找到它了到基类?再次失败:无法创建抽象类的实例=(我不想继续讨论这个问题,但我认为我们需要看到所有的代码,它们的格式都很好,因为它们实际上是通过编译器进行的。例如,您尝试在何处添加这一行?它应该在类内部。。。