Summary
In this two-part series, we looked at good OOP design and a few "best practices" techniques in C++ coding. I've stressed the interface for the most part, with a few comments on implementation and a very few on speed or efficiency.
I also tried to stress the psychology of design, although I haven't explicitly called it that. Computers exist for humansnot vice versa. The whole reason for high-level languages such as C++ is that they are readable by humans. So write for the human, not for the computer. Make your design clean, intuitive, orthogonal, and flexible. Don't tie the hands of the user and don't create confusion.
I believe that software testing should be a way of life because software reliability is the Holy Grail of the computing community. Always test and always analyze, and always get the computer to do as much of the work as you can because that is what it is for.
I am a great believer in documentation. We say with tongue in cheek, "When all else fails, read the directions," but if the directions were better written, we might be more inclined to read them. We would save ourselves time and effort, and the world would be a better place.
In short, software should not be thrown together; it should be crafted. Follow the wisdom that others have discovered before you. Write your software with attention to detail, with an eye on quality, and above all with the pride of a craftsman.