C++基类指针容器,编辑特定对象的属性

Posted

技术标签:

【中文标题】C++基类指针容器,编辑特定对象的属性【英文标题】:C++ base class pointer container, edit attributes of specific object 【发布时间】:2016-06-14 21:19:15 【问题描述】:

我有一个名为 Cat 和 Dog 的动物基类和派生类。 display() 和 readfile() 都是两个类中的虚函数。

目前,一旦调用 readfile(),屏幕上只会显示“Kay”。如何以某种方式读取文件中的所有行,以便我可以在向量中找到一个项目,然后再对其进行编辑,例如,如果我想通过运行名为 changeName 的函数将“Sugar”更改为“Sopa”( ) 例如?

Cat.csv
Kay
Sugar
Jo 


int main() 

   AnimalCollection coll;

   std::ifstream file("Cat.csv");

   Cat *cat = new Cat("CAT");
   Dog *dog = new Dog("DOG");

   coll.push_back(cat);
   coll.push_back(dog);

  for (Animal *c : coll)
  
     c->display();
  

  for (Animal *c : coll)
  
    c->readfile(file);
  

  return 0;

【问题讨论】:

请提供minimal reproducible example。 将文件内容加载到适当的容器中(即std::map),并在需要时从容器中检索信息。 您描述的内容与您发布的代码不符,但两者之间的一致之处在于您要求单个动物读取文件,并期待多个结果。 【参考方案1】:

这个问题缺少一个重要的部分。

就像@KennyOstrom 指出的那样,该文件似乎只被读取了一次。 file.seekg(0, file.beg); 可以提供帮助。

这能解决你的问题吗?

for (Animal *c : coll)

   c->readfile(file);
   file.seekg(0, file.beg);

在这种情况下,更好的解决方案是读取文件一次并将内容提供给不同的类。

【讨论】:

以上是关于C++基类指针容器,编辑特定对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

C++ 在函数外使用基类指针

C++ 句柄类

C++ 通过多态和指针自定义异构容器

如何在没有直接继承的情况下访问基类容器中的派生对象

从基类函数派生的类容器

C++ 初始化作为对象指针容器的成员变量