Should I hide or show this implementation? An animation is composed of frames. I have the following class:

class Frame
{
private:
    sf::IntRect rect;
    unsigned int duration;

public:
    Frame(sf::IntRect rect, unsigned int duration);

    unsigned int getDuration();
    sf::IntRect&amp; getRect();
};


At the animation class I have the following function:

void Animation::addFrame(sf::IntRect rect, unsigned int duration) // public
{
    frames.push_back(Frame(rect, duration)); // ps: private std::vector&lt;Frame&gt; frames;
}


should it actually be:

void Animation::addFrame(Frame frame) // public
{
    frames.push_back(frame);
}


thus showing how animation is implemented underneath?
I'm also in doubt if the frame class shouldn't simply be a struct with rect and duration. Thanks a lot in advance!
Never lie in your code. If you say: addFrame, I expect that passing Frame should be absolutely fine. The first function you have to provide as this class' interface is addFrame(Frame const&amp;). Then, if you firmly believe that having the (IntRect, uint) overload is really useful when writing real client code, add this overload. But (Frame const&amp;) should go first (I mean when you think whether or not).

BTW, I'm not sure what the Frame is, but you should consider passing it by constant reference - that's idiomatic.