2015-03-28 2 views
0

В следующем коде я не могу достичь своего подкласса. Мне нужно, чтобы мой подкласс под суперклассом наследовал его, но суперкласс не будет знать, что указать, если только подкласс не определен до него.Как я могу достичь своего подкласса? C++

class ParticleSystem 
{ 
    Particle *ptr_to_particles; 

    void update() 
    { // Loop through number of particles 
     // and call their update method. 
     ptr_to_particles[i].update(); 
    } 
} 

class Particle : public ParticleSystem  //Inherits ParticleSystem 
{ 
    void update(); 
} 

Если кто-либо может предложить предложения о том, как это сделать по-другому, я приветствую его. Благодарю.

+1

Вы должны узнать больше о наследовании, 'ParticleSystem' не звучит как что-то' Particle' должен унаследовать от ... – Kelm

ответ

4

Я думаю, вы должны пересмотреть свой дизайн. A ParticleSystem должен имеет номер Particle (например, std::vector<Particle>). Не представляется правильным для Particle до быть типомParticleSystem. Что-то вроде этого

class Particle 
{ 
public: 
    void update(); 
}; 

class ParticleSystem 
{ 
public: 
    void update() 
    { 
     for (auto particle : _particles) 
     { 
      particle->update(); 
     } 
    } 

private: 
    std::vector<Particle*> _particles; 
}; 
+0

я вижу. Но если частицы являются частью системы, разве они не собираются делиться членами системы частиц, такими как скорость и положение? Потому что я думал, что частицы следуют системе, которую вы затем меняете. – Zebrafish

+0

'speed' и' position' не должны быть членами 'ParticleSystem', в первую очередь, звучат так, как будто они должны быть членами' Particle'. «ParticleSystem» должна иметь метаинформацию, такую ​​как количество частиц, системный домен, границы, внешние силы и т. Д. – CoryKramer

+0

@ Скорость и положение системыTitoneMaurice системы рассчитываются с учетом скорости и положения всех частиц в системе. Применение изменения (например, силы) к системе означает применение этого изменения к каждой частице системы. – lodo

3

Возможно, вам стоит изменить ваш дизайн. A Particle не является логическим подтипом ParticleSystem. A ParticleSystem - всего лишь композиция Particle s, а не супертип Particle.

class Particle 
{ 
    void update(); 
}; 

class ParticleSystem 
{ 
    Particle* particles; 
    void update() 
    { 
     // forall i 
     particle[i].update(); 
    } 
}; 
Смежные вопросы