§ 22. Тып даных клас (class)

22.3. Прыклад работы з класам

Пры выкарыстанні аб’ектаў сістэма праграмавання Code::Blocks выдае падказкі для палёў і метадаў карыстальніцкіх класаў, гэтак жа як і для ўбудаваных класаў.

Для карыстальніцкіх класаў, абвешчаных у бягучым файле (не вынесеных у асобны файл), у спісе прысутнічаюць і прыватныя кампаненты класа. Прыватныя кампаненты класа абазначаюцца чырвоным, а публічныя — зялёным. Кружочак каля кампанента класа азначае, што ён з’яўляецца полем. Кружочак у дужках паказвае на метад, значок плюс каля кружочка — на тое, што гэта канструктар.

Прыклад 22.6. Апісаць клас IntNumber для работы з цэлым лікам. У класе вызначыць функцыі для рэалізацыі наступных метадаў: праверкі ліку на прастату, падліку колькасці лічбаў у ліку, «перавароту», атрымання працэнтаў ад ліку. Прадэманстраваць работу метадаў.

Этапы выканання задання

I. Зыходныя даныя: пераменная s — лік.

II. Вынік: дэманстрацыя работы метадаў класа.

III. Алгарытм рашэння задачы.

1. Ввод Увод зыходных даных.
2. Рэалізуем наступныя метады
.

2.1. Лагічная функцыя  simple() праверыць, ці з’яўляецца лік простым. Праверка ліку на прастату была рэалізавана ў прыкладзе 11.26. 
2.2. Функцыі kol_numbers() для падліку колькасці лічбаў у ліку (рэалізавана ў прыкладзе 8.17) і перавароту ліку perevorot() будуць вяртаць значэнні int
2.3. Функцыя percent(double z) для атрымання працэнтаў ад ліку будзе залежыць ад параметра (велічыня працэнта) і вяртаць тып double.

3. Вывад вынікаў.

IV. Апісанне пераменных: n – IntNumber, IntNumber – class.

Прыклад 22.6.

V. Праграма:

#include <iostream>

#include <сmath>

 

using namespace std;

 

class IntNumber

{

  int field;

  public:

    //канструктар класа

    IntNumber(int fi) {field = fi;}

    //атрыманне значэння ліку

    int get_num() {return field;}

  //праверка на прастату

    bool simple();

    //колькасць лічбаў ліку

    int kol_numbers();

    //пераварот ліку

    int perevorot();

  //працэнт ад ліку

    double percent(double z);

};

 

bool IntNumber::simple()

{

  int i = 2;

    while (field % i != 0 &&

           i * i <= field)

      i++;

    return(* i > field);

}

 

int IntNumber::kol_numbers()

{

  int i = 0;

  int s = field;

  while (> 0){

    i++;

    s /= 10;

  }

  return i;

}

 

int IntNumber::perevorot()

{

  int x = 0;

  int s = field;

    while (>= 1){

      x = x * 10 + s % 10;

      s /= 10;

  }

    return x;

}

 

double IntNumber::percent(double z)

{

  return field * z / 100;

}

 

int main()

{

  int a;

  cout << "vvedi chislo" << endl;

  cin >> a;

  IntNumber n(a);

  if (n.simple()){

    cout << "chislo " << n.get_num();

    cout << " - prostoe" << endl;

  }

  else {

    cout << "chislo " << n.get_num();

    cout << " - sostavnoe" << endl;

  }

  cout << "v chisle " << n.get_num();

  cout << " kol-vo cifr = " ;

  cout << n.kol_numbers() << endl;

  cout << "perevertysh chisla - ";

  cout << n.perevorot() << endl;

  double x;

  cout << "vvedi %" << endl;

  cin >> x;

  cout << x << "% ot chisla ";

  cout << n.get_num() << " - ";

  cout << n.percent(x) << endl;

  return 0;

}

VI. Тэсціраванне.