The design of class is the design of type. Before you define a new type, make sure that you have considered all the discussion topics covered by this article.
How should objects of the new type be created and destroyed?
What is the difference between the initialization of an object and the assignment of an object?
What does it mean if the object of the new type is passed by value (passed in the values)?
What is the "legal value" of the new type?
Does your new type need to match an inheritance graph (inheritance graph)?
What kind of conversion do you need for your new type?
What operators and functions are reasonable for this new type?
What kind of standard function should be dismissed?
Who should take a member of the new type?
What is the "undeclared interface" for the new type (undeclared interface)?
How generalized is your new type?
Do you really need a new type?
Effective C + +-----clause 19: Design class like design type