Core C++: A Software Engineering Approach