14.2. What is a class?

In most object-oriented programming languages, a class is a user-defined type that includes a set of functions. As we have seen, structures in C++ meet the general definition of a class.

But there is another feature in C++ that also meets this definition; confusingly, it is called a class. in C++, a class is just a structure whose instance variables are private by default. For example, I could have written the playing_card definition:

class playing_card
{
  int suit, rank;

public:
  playing_card ();
  playing_card (int s, int r);

  int get_rank () const { return rank; }
  int get_suit () const { return suit; }
  void set_rank (int r) { rank = r; }
  void set_suit (int s) { suit = s; }
};

I replaced the word struct with the word class and removed the private: label. This result of the two definitions is exactly the same.

In fact, anything that can be written as a struct can also be written as a class, just by adding or removing labels. There is no real reason to choose one over the other, except that as a stylistic choice, most C++ programmers use class.

Also, it is common to refer to all user-defined types in C++ as “classes,” regardless of whether they are defined as a struct or a class.

By default, the data members of a class are private.

How can we change Deck, which is currently a struct, into a class?

struct Deck {
private:
  vector<Card> cards;

public:
  Deck ();
  Deck (int n);

  void print () const;
  void swapCards (int index1, int index2);
  int findLowestCard (int index);
  void shuffleDeck ();
  void sortDeck ();
  Deck subdeck (int low, int high) const;
  Deck mergeSort () const;
  Deck mergeSort (Deck deck) const;
};

Private data members can be accessed within the class.