밑의 클래스에 대해서 다형성이라는 것을 넣어보려고 했습니다.
다른 것은 다 되는데(...) 입력받는 부분이 골치로군요. 클래스 안에서 입력을 해주면 좋겠는데요..
역시나(...) 오늘도 소스와 함께 질문이 올라가겠습니다.
=질문 많다고 구박하시면 미워할겝니다. 나름대로 고민도 해보고 올리는 거니까요;; =
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
class Graphic {
public:
virtual void Draw()=0;
};
class Circle : public Graphic {
public:
virtual void Draw() {
cout << "동그라미를 그립니다" << endl;
}
};
class Line : public Graphic {
public:
virtual void Draw() {
cout << "선을 그립니다" << endl;
}
};
class Triangle : public Graphic {
public:
virtual void Draw() {
cout << "삼각형을 그립니다" << endl;
}
};
class Square : public Graphic {
public:
virtual void Draw() {
cout << "네모를 그립니다." << endl;
}
};
class Test {
private:
vector<Graphic *> vi;
public:
vector<Graphic *>::iterator pvi; ///음...님의 충고로 멤버가 아닌 공개부분에 설정.
Test() {}
~Test() {
for ( pvi = vi.begin() ; pvi != vi.end() ; ++pvi )
delete (*pvi);
}
void SetDraw() // 이 함수는 뭐를 받아서 동적으로 집어 넣는다.
{ // 질문이 바로 밑의 소스처럼이 아닌 함수의 인자로 Line이나 Circle. Square를 받아서 동적으로 할당되게 하는 방법이 있는지 궁금하군요.
// 즉, Graphic *pGraphic = new 인자로받은거 ... 이렇게 가능한지 모르겠습니다. switch로 해볼까 했지만 그러면 소스가 아름답지 않기 때문에(...)
Graphic *pGraphic = new Line(); //일단은 시험삼아 만들어보고..
vi.push_back(pGraphic); //집어 넣자.
}
void GetDraw() {
for ( pvi = vi.begin() ; pvi != vi.end() ; ++pvi )
(*pvi)->Draw();
}
};
void main()
{
Test AAA;
AAA.SetDraw();
AAA.GetDraw();
}
itr 은 for 문을 돌리는 의도 말고는 전혀 없거든요.
지우시고 -_-
void GetDraw()
{
for ( vector< Graphic * >::iterator itr = vi.begin(); itr != vi.end(); ++itr )
(*itr)->Draw();
}
하시면 될 것 같아요.