# C++ Notes: Classes

## History of C++

Bjarne Stroustrup of Bell Labs extended the C language to be capable of Object-Oriented Programming (OOP), and it became popular in the 1990's as C++. There were several enhancements, but the central change was extending `struct` to allow it to contain functions and use inheritance. These extended structs were later renamed classes. A C++ standard was established in 1999, so there are variations in the exact dialect that is accepted by pre-standard compilers.

## Public and Private parts

All member fields in a class are private by default (no code outside the class can reference them), whereas fields of a struct are public, meaning that anyone can use them. For example,

    struct Product {
       char mfg_id[4];    // 4 char code for the manufacturer.
       char prod_id[8];   // 8-char code for the product
       int  price;        // price of the product in dollars.
       int  qty_on_hand;  // quantity on hand in inventory
    };

could be rewritten as a class like this

    class Product {
    public:
        char mfg_id[4];    // 4 char code for the manufacturer.
        char prod_id[8];   // 8-char code for the product
        int  price;        // price of the product in dollars.
        int  qty_on_hand;  // quantity on hand in inventory
    };