2011-03-16 4 views
0

아래의 코드 조각에서 변수 (예 : x, y, 유형)를 사용하여 클래스 클래스의 인스턴스를 초기화하려면 어떻게해야합니까? 나는 그것을 올바르게 작동 시켰고 얼마나 많은 것들을 삽입했는지에 관계없이 인스턴스를 트리거합니다 ... 나는 각 인스턴스마다 다를 특정 변수를 가진 적을 생성하는 최선의 방법을 알아야합니다 ... 특히 그 변수 중 기본 클래스에 있고 다른 변수는 없습니다.특정 변수 값을 사용하여 파생 클래스 시작

class BaseObject 
{ 
public: 
    virtual void Render() = 0; 
    int x; 
    int y; 
}; 

class Enemy : public BaseObject 
{ 
public: 

    Enemy() { } 
    virtual void Render() 
    { 
     cout << "Render! Enemy" << endl; 
    } 

typedef std::set<BaseObject *> GAMEOBJECTS; 
GAMEOBJECTS g_gameObjects; 

int main() 
{ 
    g_gameObjects.insert(new Enemy()); 

    g_lootObjects.insert(new Loot()); 

    for(GAMEOBJECTS::iterator it = g_gameObjects.begin(); 
    it != g_gameObjects.end(); 
    it++) 
    { 
     (*it)->Render(); 
    } 

    for(GAMEOBJECTS::iterator it = g_lootObjects.begin(); 
     it != g_lootObjects.end(); 
     it++) 
    { 
     (*it)->Render(); 
    } 

    return 0; 
} 

답변

4

적 생성자 및 기본 생성자에 인수를 포함합니다. 그런 다음 이들을 사용하여 멤버 변수를 초기화 할 수 있습니다.

class BaseObject 
{ 
public: 
    BaseObject(int x, int y) : x(x), y(y){ } 
    virtual void Render() = 0; 
    int x; 
    int y; 
}; 

class Enemy : public BaseObject 
{ 
public: 

    Enemy(int x, int y, int foo) : BaseObject(x,y), foo(foo) { } 

    int foo; 
... 
}; 
+0

감사합니다! 그건 완벽하게 작동합니다. 이상한 구문 ... 왜 내가 x (x), y (y) {} 부분을 왜 타이핑하는지 분명히 해 주시겠습니까? x (x)의 첫 번째와 두 번째 x는 무엇과 일치하며, 빈 squigglies는 어떤 용도로 사용됩니까? – motioneffector

+0

@motioneffector : 처음 엔 이상하게 보일 수 있지만 좋아지면 커질 것입니다. 다른 언어와 비교하면 정말 멋지 네요. – GWW

+1

괄호는 객체의 생성자를 호출하는 것을 의미합니다. _squigglies_는 함수의 본문이며이 경우 클래스의 빈 생성자입니다. 이것은 초기화리스트로 알려져 있으며, 멤버 변수 초기화를 위해 생성자에서 할당을 수행하는 것보다 더 효율적입니다. – AJG85