Source: http://cppcurriculum.weebly.com/uploads/2/3/9/3/23930314/design_guide.pdf