16. Капсулиране и членове-функции

Интерфейс и капсулиране
#include <iostream>
#include <string>
using namespace std;

class Product  {
public:   /*интерфейс*/
   Product();                    /*създава нов продукт*/
   void read();                         /*чете продукт*/
   bool is_better_than(Product b) const;    /*сравнява*/
   void print() const;                     /*отпечатва*/
private:  /*капсулиране*/
   string name;                         /*скрити данни*/
   double price;                        /*скрити данни*/
   int score;                           /*скрити данни*/
};

int main()
{  Product best;

   bool more = true;
   while (more)
   {  Product next;
      next.read();
      if (next.is_better_than(best)) best = next;

      cout << "More data? (y/n) ";
      string answer;
      getline(cin, answer);
      if (answer != "y") more = false;
   }
   cout << "The best bang for the buck is ";
   best.print();
   return 0;
}

Членове-функции
* конструктор
Product::Product() {  price = 10000;   score = 0; }

* мутатори (set-функции)
void Product::read()
{  cout << "Please enter the model name: ";
   getline(cin, name);
   cout << "Please enter the price: ";
   cin >> price;
   cout << "Please enter the score: ";
   cin >> score;
   string remainder;
   getline(cin, remainder); }

* функции за достъп (get-функции)
bool Product::is_better_than(Product b) const
{  if (price == 0) return false;
    if (b.price == 0) return true;
    if (score/price > b.score/b.price) return true;
    return false;   }

void Product::print() const
{  cout << name
        << " Price: " << price
        << " Score: " << score << "\n";  }
* Неявен параметър на член-функция
set-функции - променят неявния си параметър
get-функции - не променят неявния си параметър, използване на const