объявление друга класса интерфейса в абстрактном базовом классе

Поэтому я подумал о том, чтобы попытаться запрограммировать игру «тетрис» на c ++ с помощью sfml, и подумал о том, как можно реализовать игру и понял, что она может быть полезна при наследовании. Я думал, у меня будет:

-абстрактный базовый класс, который будет представлять тетромино (формирует кусочки головоломки в тетрисе): он называется Tetromino_Base

-классы, которые будут наследоваться от базового класса для представления конкретного тетромино, поскольку существуют разные формы, такие как квадраты, столбцы … и т. д.

-класс интерфейса с именем Tetromino, который является типом, которым будет манипулировать пользователь.

По ходу дела я понял, что моему интерфейсу класса нужен доступ к абстрактным членам класса, поэтому я сделал для него объявление друга, но подумал: это хорошая практика? Сделать объявление друга вашим интерфейсным классом в базовом классе?

Вот основная часть кода:

class Tetromino;

class Tetromino_Base {
friend class Tetromino;
public:
virtual ~Tetromino_Base() {};
protected:
float m_x, m_y;
sf::Texture m_texture;
sf::VertexArray m_vertices;

virtual bool create(const sf::Vector2f&, const float&, //position of the object, scale of the object
const std::string&, const sf::Vector2f&, const float&) = 0;
//file name for the texture, position in the texture, scale of the texture
};

class Square : public Tetromino_Base {
public:
~Square() {}
private:
bool create(const sf::Vector2f&, const float&,
const std::string&, const sf::Vector2f&, const float&);
};

class Tetromino : public sf::Drawable {
public:
Tetromino(int tetroCode = 0);

bool create(const sf::Vector2f& sorigins, const float& ssc,
const std::string& fileName, const sf::Vector2f& torigins, const float& tsc){
//access needed here
return p->create(sorigins,ssc,fileName,torigins,tsc);
}

private:
Tetromino(Tetromino_Base* ptr) : p (ptr) {}
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const {
//access needed here
states.texture = &(p->m_texture);
target.draw(p->m_vertices, states);
}
Ptr<Tetromino_Base> p;
};

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]