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++基类指针容器,编辑特定对象的属性的主要内容,如果未能解决你的问题,请参考以下文章