КаталогИндекс раздела
ОглавлениеВперед


Лабораторная работа ╧1.
Простые классы. Доступ к элементам класса

1. Цель работы

Целью лабораторной работы является получение практических навыков при использовании простых классов в языке С++

2. Темы для предварительного изучения

3. Варианты индивидуальных заданий

Варианты индивидуальных заданий взять из лабораторной работы N2 по языку С.

4. Задание к выполнению

5. Пример решения задачи (вариант 30).

5.1. Разработка алгоритма решения.

Алгоритм программы линейный и его программная реализация не представляется затруднительной.

5.2. Описание структуры класса.

5.2.1. Описание полей класса.

Начн╦м разработку класса с выбора типа данных для его полей. В соответствии с заданием наш класс должен иметь следующие поля:

Итак, таким образом, мы имеем класс с полями:
class church {
      char *name;   //Название
      char school;   //Школа
      unsigned int count;   //Количество монахов
      float square;   //Площадь земли
.
.
.
}

5.2.2. Функции-аксессоры.

В соответствии с условиями задания наш класс должен иметь три функции-аксессора:

Начн╦м с функции set() . Задача этой функции - считать данные, вводимые пользователем с клавиатуры, и записать их в поля класса. Т.е для работы с функцией необходимо определить ряд переменных, типы которых соответствуют типам полей класса. Определим эти переменные:
      char *n;   //Название
      char t;   //Школа
      unsigned int s;   //Количество монахов
      float h;   //Площадь земли

Присваивание значений полям класса производится как обычно с помощью оператора равенства =. Т.е форма записи будет выглядеть следующим образом:   поле_класса = определ╦нная_переменная. При присваивании символьных полей необходимо воспользоваться функцией strcpy(), для чего не забыть в список используемых файлов библиотек подключить файл <string.h>

Далее приступим к функции get() . Она отвечает за считывание значений из полей класса. Для записи этих значений нам опять подойдут переменные, определ╦нные выше. Работа функции get() полностью аналогична работе функции set() за исключением того, что в роли при╦мника значений выступают переменные, а в роли передатчика - поля класса. Т.е форма записи будет выглядеть следующим образом:   определ╦нная_переменная= поле_класса .

Необходимо обратить внимание на то, что для корректной работы с символьным полем требуется освободить память, занимаемую переменной, а затем выделить память под строку размером с длину строки, хранящейся в символьном поле класса. Это позволит добиться корректного отображения строк на экране и их правильного сохранения в переменной. Например:

delete[] a; // освобождаем память, занимаемую переменной а
a=new char [strlen(name)+1];// выделяем память под строку

Третья функция-аксессор show() производит вывод на экран значений полей класса и е╦ реализация не составляет особого труда.

     Полный текст программы приведен ниже.


Лабораторная работа ╧1
Классы. Функции доступа.
Вариант ╧30
Пример выполнения



#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <iomanip.h>
#define N 3

class church {
 char *name;
 char school;
 unsigned int count;
 float square;
public:
 void set(char *a,char b,unsigned int c, float d);
 void get(char *a, char &b, unsigned int &c, float &d);
 void show(void);
};

void church::set(char *a,char b,unsigned int c,float d) {
 strcpy(name,a);
 school=b;
 count=c;
 square=d;
}

void church::get( char * a, char &b, unsigned int &c, float &d)
{
 delete[] a;
 a=new char [strlen(name)+1];
 strcpy(a,name);
 b=school;
 c=count;
 d=square;
}

void church::show(void) {
 cout<<name<<" ";
 cout<<school<<" ";
 cout<<count<<" ";
 cout<<square<<" ";
}


int main(void) {
  char *n;
  char t;
  unsigned int s;
  float h;
  short i;

 church obj[N];
 clrscr();
 cout<<"Работа функции SET!\n";
 for (i=0; i<N; i++)
 {           
   cout<<"Название, Школа, Количество монахов, Площадь земли: ";
   cin>>n;
   cin>>t;
   cin>>s;
   cin>>h;
   obj[i].set(n,t,s,h);
 }
 cout<<"Работа функции SHOW!\n";
 cout<<"Название, Школа, Количество монахов, Площадь земли: \n";
 for (i=0; i<N; i++)
 {
   obj[i].show();
   cout<<"\n";
  }
 cout<<"Работа функции GET и SHOW!\n";
 cout<<"Название, Школа, Количество монахов, Площадь земли: \n";
 for(i=0; i<N; i++)
 {
   obj[i].get(n,t,s,h);
   obj[i].show();
   cout<<"\n";
  }
getch();
delete[] n;
return 0;
}

ОглавлениеВперед
КаталогИндекс раздела