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

标签 c++ polymorphism

我有一个类有一个成员,该成员是另一个类的实例,该类以 vector 作为成员;像这里:

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 的成员是否可以与上一次迭代具有相同的值?)如果是,有人可以向我解释为什么吗?有什么解决办法吗?

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

最佳答案

NO,这是不可能的。 c1Obj 保证每次在循环中创建,并在循环作用域结束时销毁。你做错了:

I1 i1 = new C2;

应该是

I1* i1 = new C2;

 i1.getC1(c1Obj);

应该是

 i1->getC1(c1Obj);

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

关于C++:多态成员可以保持不变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23782464/

相关文章:

c++ - 更改我的源代码后,Buildroot 清理我的依赖项

c++ - 我必须为我的 C++ 类字段使用指针吗?

c++ - C++中结构的选择排序

ruby-on-rails - 如何创建多态关系的种子

java - 用多态类替换 switch

c++ - 使用二进制文件进行简单的高分更新

c++ - 一次性使用类

C++如何从main调用派生基类函数

java - 为什么类变量的运行时多态性行为会发生变化

Java多态-如何在不同的类中调用相同的方法