C++ was designed to provide Simula's facilities for program organization together with C's efficiency and flexibility for systems programming. C++ features include classes, operator overloading, references, virtual functions, templates, and exceptions. Classes allow defining types with member functions and data, while templates provide a macro-like polymorphism for containers. Namespaces help avoid name collisions in large programs. The Standard Template Library provides common data structures and algorithms. C++ can be used for embedded systems if the compiler is suitable and features like inheritance, templates and exceptions are used judiciously.