c继承设计问题

在c中我想要一个抽象类型Query的数组,其中包含函数calcScore()
这是一个纯虚函数.
我有两个非抽象的类:实现calcScore函数的ConQuery和DisQuery.

为了做到这一点,我定义了这样的数组:

vector<Query*> m;

我迭代并调用这个函数:

for (vector<Query*>::const_iterator it1 = index.begin() ;it1 != index.end() ; it1++)
{
     cout << (*it1)->CalcScore() << endl; 
}

调用Query的纯虚函数时出错.
如何通过多态类型调用ConQuery函数或DisQuery函数?
谢谢.

解决方法:

你确定在ConQuery和DisQuery中实现了CalcScore吗?
我试过这个:

#include <iostream>
#include <vector>

class Query{
public:
    virtual int CalcScore() = 0;
};

class Query2 : public Query
{
public:
    virtual int CalcScore()
    {

        return 2;
    }
};

class Query3 : public Query
{
public:
    virtual int CalcScore()
    {

        return 3;
    }
};

int main(int argc, char* argv[])
{

    std::vector<Query*> m;
    m.push_back(new Query2());
        m.push_back(new Query3());
    for (std::vector<Query*>::const_iterator it1 =  m.begin() ;it1 !=  m.end() ; it1++)
    {
        std::cout  << (*it1)->CalcScore();
    }
}

它在我的VS2012下工作正常.

我在一些项目中也使用了很多次.

也许您尝试push_back一个Query项(而不是con / dis)?

上一篇:如果只有指向C中基类的指针,则使用派生类参数重载函数


下一篇:如何创建子类,以便参数属于Java中的子类类型