c++ 다형성 및 fstream 질문 드립니다.
조회수 465회
FoodItem이라는 클래스는 Item이라는 클래스의 자식 클래스이며
멤버 변수로 code, name, price, duedate를 갖습니다.
그 중 readItemFromFile 이라는 함수를 통해 미리 제공된 파일을 읽고
그 내용을 cout 해주는 문제입니다.
int FoodItem::readItemFromFile(ifstream& _fin)
{
_fin >> code >> name >> price >> dueDate;
if (!_fin)
return 0;
return 1;
}
아래는 메인함수입니다.
#include<vector>
#include "cFoodItem.h"
#include "cOfficeItem.h"
int main()
{
vector<Item*> vItem;
Item* pItem = new FoodItem;
ifstream fin;
fin.open("foodItem.txt");
while (pItem->readItemFromFile(fin))
vItem.push_back(pItem);
fin.close();
pItem = new OfficeItem;
fin.open("officeItem.txt");
while (pItem->readItemFromFile(fin))
vItem.push_back(pItem);
fin.close();
for (auto elem : vItem)
elem->displayItem();
delete pItem;
return 0;
}
이처럼 pItem이라는 부모클래스의 포인터를 생성하고 FoodItem을 할당받습니다. 파일로 부터 읽은 아이템의 정보를 vItem 이라는 벡터에 저장한 뒤 출력해줍니다.
F1002 계란빵 1000 20181120
F1003 사발면 1500 20201100
메모장에는 다음과 같은 아이템의 정보가 들어있습니다.
이때
다음과 같이 맨 마지막에 입력받은 원소를 두번 출력하게 되는데
어느 부분에서 잘못된 것인지 모르겠습니다.
이렇게 질문하는게 맞는 지 모르겠는데 ㅠㅠ
이 문제처럼 부모클래스의 포인터를 이용할 때 주의해야 할 점들이 있을까요?
도와주세요!
댓글 입력