c++ 다형성 및 fstream 질문 드립니다.

조회수 42회

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

메모장에는 다음과 같은 아이템의 정보가 들어있습니다.

이때 이미지

다음과 같이 맨 마지막에 입력받은 원소를 두번 출력하게 되는데

어느 부분에서 잘못된 것인지 모르겠습니다.

이렇게 질문하는게 맞는 지 모르겠는데 ㅠㅠ

이 문제처럼 부모클래스의 포인터를 이용할 때 주의해야 할 점들이 있을까요?

도와주세요!

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.