마지막 게시물에서 가져온 지침을 따라 코드를 다시 작성했습니다.C++ 유형 검사 오류
내 헤더 파일
#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
#include <typeinfo>
#include "Tour.h"
#include "GuidedTour.h"
using namespace std;
class TourManager {
private:
vector<Tour *> tours;
void setupTour();
string getUserInput();
string displayMainMenu();
void displayTourDetails();
void callDisplayOnEach();
void addBookingsToTour();
public:
TourManager();
void go();
};
은 그 때 나는 투어 guidedTour 물체로 "목록"벡터를 채울 수있는 기능을 가지고있다.
void TourManager::setupTour() {
tours.push_back(new Tour("FP001", "Fun Park 3 Day Pass", 110.00));
tours.push_back(new GuidedTour("SK003", "Learn to Ski Adventure Tour", 240.00, "28/07
}
void TourManager::callDisplayOnEach() {
for (vector<Tour *>::iterator it = tours.begin() ; it != tours.end(); ++it)
{
if(typeid(*it) == typeid(GuidedTour))
{
cout << "Guided Tour" << "\n";
}
else
{
cout << "NOT Guided Tour : " << typeid(*it).name() << "\n";
}
}
}
그러나 나는 항상 투어 개체를 다시 얻는 것 같습니다. EG : 항상 가이드가 아닌 투어를 인쇄합니다.
어떻게 다형성 동작을 보관합니까?
상담 해주실 수 있습니까? (나는 ++ C에 새로 온) 내이 어떻게 다형성 작동하지 않습니다 C++ 98
많은 감사
벡터 유형 때문입니다. 안내 된 객체를 추가하기위한 별도의 벡터 목록을 유지하십시오. –
user1502952
예, 둘러보기 개체에 대한 포인터 목록이 있습니다. 따라서 목록을 참조하면 항상 둘러보기 *가 생성됩니다. GuidedTour *를 거기에 밀어 넣으면 안됩니다 - 컴파일러는 Tour *로 캐스팅하려고합니다. 그러면 나중에 문제가 발생합니다. – HvS
학교 과제물 일 때, 단일 벡터를 사용하여 값을 검색해야합니다. –