저는 C++을 처음 사용하고 텍스트 파일에서 명령을 읽을 거북이 에뮬레이터를 구현하려고합니다. 벡터에 넣고 글랏
을 사용하여 그립니다. 노드 클래스, 노드에서 파생 된 명령 클래스, 명령에서 4 파생 클래스 (전달, 왼쪽, 오른쪽, 점프, 반복) 및 명령 저장에 사용되는 Prog 클래스가 있습니다. |파생 된 클래스 멤버에 액세스하기위한 추상 클래스에 대한 포인터의 벡터
class node
{
public:
node();
virtual ~node();
virtual void Run()=0;
};
class command : public node
{
private:
float v;
public:
command();
command(float);
~command();
virtual void Run();
friend istream& Prog::operator>> (istream& in, Prog& pro);
};
및
class Repeat : public command
{
private:
Prog pg;
public:
Repeat(float value, istream& in);
~Repeat();
void Run();
friend istream& Prog::operator>> (istream& in, Prog& pro);
};
class Prog
{
private:
vector<node*> listing;
public:
Prog();
~Prog();
void Run();
friend istream& operator>> (istream& in, Prog& pro);
};
지금 우리는 4 번 다음 명령 을 반복해야 자신의 values.for의 예를 반복 한 다음 임시 벡터에서 명령을 파일에서 읽고 쓸 수 있습니다 반복 | 4 | 앞으로 | 4 | 왼쪽 | 40 | 앞으로 | 10
우리는 4 개의 파생 된 클래스의 Run 함수를 호출하고 사용할 수있는 기본 클래스 객체에 대한 Prog 클래스 포인터 안에 목록 벡터를 추가하려고합니다. 다형성
내 문제는 내가 사용하는 것입니다. 내 임시 벡터를 통해 이동하고 찾을 각 명령에 대한 개체를 만들 때 동적 이름을 사용할 수 없기 때문에 (나는 생각한다) 같은 이름을 사용할 수 있지만 나는 각 새 전달 명령을 fw 개체를 덮어 쓸 것이라고 생각합니다
else if (command=="FORWARD")
{
Forward::Forward fw(value);
node* ptr;
ptr= &fw;
pro.push_back(ptr);
text.erase (text.begin(), text.begin()+2);*/
}
나는 다음과 같은 것을 사용하려고하지만 올바른 방법
else if (command=="FORWARD")
{
Forward::Forward fw(value);
new Forward(fw);
node* ptr;
ptr= &(??);
pro.push_back(ptr);
text.erase (text.begin(), text.begin()+2);*/
}
내가 원하는 걸 할 수있는 방법이를 찾을 수 없습니다? 결국 우리는 음식물을 호출 할 :: 내가 선언 한 친구의 기능에 대한이
void Prog::Run()
{
vector<node*>::iterator it;
for (it=listing.begin();it!=listing.end();it++)
listing[it]->Run();
}
도 뭔가처럼 보일 것이고, 그것이 바로 확실 종료하지 메신저 실행 : 내가 PROG 클래스에 friend istream& operator>> (istream& in, Prog& pro);
정의를 방금 다른 두 클래스에서 선언했거나 각 클래스에 대해 정의하고 각 클래스에 다른 두 번째 인수가 필요합니까 ??
미리 감사드립니다.
with pro.push_back (새 전달 (값)); 값으로 생성 된 객체에 대한 포인터 또는 벡터에 삽입 된 실제 객체에 대한 포인터가 있습니까? – pmantz
이 코드는 ** 하나 ** 객체 (값으로 생성됨) 만 생성하므로 벡터의 포인터가 해당 객체를 가리 킵니다. –