【问题标题】:C++ base class pointer container, edit attributes of specific objectC++基类指针容器,编辑特定对象的属性
【发布时间】: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;
}

【问题讨论】:

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

标签: c++ class pointers containers base


【解决方案1】:

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

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

这能解决你的问题吗?

for (Animal *c : coll)
{
   c->readfile(file);
   file.seekg(0, file.beg);
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2013-06-24
    • 2011-07-20
    相关资源
    最近更新 更多