Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem w dziedziczeniu [SFML 2.0]

Ostatnio zmodyfikowano 2015-05-24 17:28
Autor Wiadomość
jarek20
Temat założony przez niniejszego użytkownika
Problem w dziedziczeniu [SFML 2.0]
» 2015-05-24 13:32:24
Witam mam problem gdyż tworzę grę w oparciu o klasy pochodne
C/C++
#ifndef PLANET_H
#define PLANET_H
#include <SFML/Graphics.hpp>

class PObject
    : public sf::Shape
{
public:
    sf::Vector2f velocity;
    unsigned int gmass;
    //virtual ~PObject();
    virtual void create();
    virtual void centerOrigin();
    virtual void pull( PObject * );
    virtual void fupdate();
};

class Planet
    : public PObject
     , public sf::CircleShape
{
public:
    Planet();
};

#endif // PLANET_H
Problem w tym ,że gdy tworze objekt typu Planet to wyrzuca mi ze niektóre funkcje wystepuja podwojnie. Myślałem że skoro sf::Circleshape dziedziczy po sf::Shape to nie będzie problemu i się uzupełnią. Będe wdzięczny jak ktos mi pokaże jak to zrobić.
P-132699
Monika90
» 2015-05-24 14:53:05
Problem w tym ,że gdy tworze objekt typu Planet to wyrzuca mi ze niektóre funkcje wystepuja podwojnie. Myślałem że
To dziwne, bo przede wszystkim powinno Ci wyrzucić, że klasa Planet jest abstrakcyjna, z powodu funkcji sf::Shape::getPointCount i sf::Shape::getPoint. Nie można tworzyć obiektów klas abstrakcyjnych.
P-132701
jarek20
Temat założony przez niniejszego użytkownika
» 2015-05-24 17:17:27
Tak, wystąpiły dwa błędy ale zapomniałem napisać że ten o abstrakcyjnej klasie naprawiłem. Robię teraz trochę inne podejście ale chciałbym wiedzieć czy jest taka możliwość ze tak 'uzupełnic' te funkcje z Shape przez circleshape
P-132705
jarek20
Temat założony przez niniejszego użytkownika
» 2015-05-24 17:28:49
Mam takie rozwiązanie na około:
C/C++
class PObject
    : public sf::Shape
{
public:
    sf::Vector2f velocity;
    unsigned int gmass;
    virtual void create();
    virtual void pull( PObject * );
    virtual void fupdate();
};

class Planet
    : public PObject
{
    sf::CircleShape t;
public:
    Planet();
    Planet( float );
    unsigned int getPointCount() const
    {
        return t.getPointCount();
    }
    sf::Vector2f getPoint( unsigned int index ) const
    {
        return t.getPoint( index );
    }
    void setRadius( float r )
    {
        t.setRadius( r );
        update();
    }
    float getRadius()
    {
        return t.getRadius();
    }
    void centerOrigin();
};
i niby działa ale i tak jak ktoś wie jak rozwiązać ten problem w bardziej 'elegancki' sposób to proszę o podpowiedź. (Oczywiście pomijając przerzucenie funkcji do odzielnego pliku bo to jest w trakcie :) )
P-132706
« 1 »
  Strona 1 z 1