Item 19 in the book is a list of things to consider when designing a new class. It strikes me that the considerations are a strict superset of the things to consider when designing a new class in Java.
- How should objects of your new type be created and destroyed?
- How should object initialization differ from object assignment?
- What does it mean for objects of your new type to be passed by value?
- What are the restrictions on legal values for your new type?
- Does your new type fit into an inheritance graph?
- What kind of type conversions are allowed for your new type?
- What operators and functions make sense for the new type?
- What standard functions should be disallowed?
- Who should have access to the members of you new type?
- What is the undeclared interface of the new type?
- How general is your new type?