Object-oriented programming (OOP) is based on the concept of "objects" which contain both data and code. An object is an instance of a class. A class defines a data type that includes data members and member functions. Abstraction hides background details and provides only essential information. Encapsulation places data and functions that work on that data together within an object. Inheritance allows a class to acquire properties of another class. Polymorphism allows a single unit to take on multiple forms, such as function overloading. Overloading makes an operator or function operate on new data types.