我有一个类似的代码(简化以帮助提出问题)
class a
{
protected:
int m_x;
public:
a(int x):m_x(x){};
~a(){};
virtual int GetX()=0;
}
class b:public a
{
public:
b(int x):a:(x){};
~b(){};
virtual int GetX(){return m_x+2;};
}
class c:public a
{
public:
c(int x):a:(x){};
~c(){};
virtual int GetX(){return m_x+4;};
}
我也有这些功能:
vector<a> GetData()
{
vector<a> data;
data.push_back(b(1));
data.push_back(c(1));
}
void printData()
{
vector<a> data=GetData();
for(int I=0;i<data.size();I++)
{
cout<< data[I].GetX()<<endl;
}
}
上面的程序由于无法实例化具有虚函数的类而没有编译。
所以我把 a 改成了这个:
class a
{
protected:
int m_x;
public:
a(int x):m_x(x){};
~a(){};
virtual int GetX()={return m_x};
}
但是我没有得到正确的结果,因为我创建了 b 和 c 类型的对象,然后当我调用 GetX 时,应该调用它们的函数而不是 a。所以我得到了这个数据:
1
1
代替
3
5
我该如何解决这个问题?
我应该打开编译器中的任何开关以使其正常工作吗?
我正在使用视觉工作室 2012。