Cách gọi một instance của một class ở ngoài sau khi đã khởi tạo nó trong một class khác

Các bác giúp em với. Em biết là câu hỏi hơi khó hiểu nên cụ thể hơn là thế này.

class Ball 
{
public:
    ...
    CircleShape BallShape(10, (20, 20));
    ...
};

...
int main()
{
    Ball Football;
    ... 
    window.draw();
    ... 
    return 0;
}

Giả sử có một class là Ball, và để vẽ hình quả bóng em tạo một instance của class CircleShape chẳng hạn. Sau đó ra hàm main em muốn gọi BallShape trong window.draw() để vẽ BallShape ra màn hình, kiểu như là window.draw( Football.BallShape); thì làm thế nào?
Em mới học về class nên cũng hơi mông lung về phần này .____.

1 Like

thì gọi window.draw(Football.BallShape); thôi?

có cách khác khó hơn tí :V là làm theo cách của SFML: kế thừa từ class sf::Drawable để có thể vẽ thẳng window.draw(Football);. Khi kế thừa từ lớp ảo Drawable này, có nghĩa là đối tượng lớp Ball tạo ra sẽ có thể vẽ được bởi 1 đối tượng khác biết vẽ :V Để ma thuật này hoạt động thì bạn phải override phương thức draw() có sẵn trong sf::Drawable: https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1Drawable.php. Lớp ảo Drawable rất đơn giản chỉ có 1 phương thức draw() :V :V :V

class Ball : public sf::Drawble //kế thừa từ sf::Drawable
{
public:
    void draw(sf::RenderTarget& target, sf::RenderStates states) const override
    {
        target.draw(mShape, states);
        // thích vẽ gì thêm ở đây nữa thì vẽ vào bằng cách gọi target.draw(..., states);
    }
private:
    sf::CircleShape mShape{10};
};

target là đối tượng khác biết vẽ ở đây :V
states chứa các thông tin khác liên quan tới render như transform matrix, texture, shader, blend mode :V ở đây chưa cần lắm.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?