C ++:多态成员可以保持不变吗?

时间:2014-05-21 11:55:18

标签: c++ polymorphism

我有一个类,其成员是另一个具有向量作为成员的类的实例;像这里:

class C1
{
private:
  std::vector<int> m_intVec;
  // ...
};

class C2 : public I1 // this is an interface
{
private:
  C1 m_c1;
  // ...
public:
  void getC1(C1& c1Out) const
  {
    c1Out = m_c1
  }
};

界面如下所示:

class I1
{
public:
  virtual ~I1() {}
  virtual void getC1(C1& c1Out) const = 0;
};

我使用多态来调用C2类:

int main(int argc, char** argv)
{
  // ...
  I1* i1 = new C2;
  // ...
  while (1)
  {
    // set the member c1 // this is not happening all the time
    // ...
    C1 c1Obj; 
    i1->getC1(c1Obj);
    // ...
  }
  // ...
}

我的问题是:c1Obj可以在上一次迭代中获得值吗? (换句话说:i1的成员可以与之前的迭代具有相同的值,如果没有重置吗?)如果是,有人可以向我解释原因吗?任何想法如何解决这个问题?

如果答案是否定的,为什么在某些情况下我会得到相同的结果:我在图像中模糊了一个区域,在某些情况下,模糊区域与之前相同,我不知道它是否是一个bug或不。

1 个答案:

答案 0 :(得分:1)

,这是不可能的。保证每次在循环中创建c1Obj,并在循环范围结束后销毁。你这样做错了:

I1 i1 = new C2;

应该是

I1* i1 = new C2;

 i1.getC1(c1Obj);

应该是

 i1->getC1(c1Obj);

注意: i1(实际上c2)将包含相同的m_c1对象,因此i1->getC1(c1Obj);语句c1Obj将始终相同。