Главная страница
Навигация по странице:

  • Поля класса

  • Статические члены - поля, и функции

  • лабораторная. Лаб_раб 5 С - классы. Лабораторная работа 5 классы цель работы изучить определение и использование классов С. Порядок выполнения работы Изучить


    Скачать 54.43 Kb.
    НазваниеЛабораторная работа 5 классы цель работы изучить определение и использование классов С. Порядок выполнения работы Изучить
    Анкорлабораторная
    Дата23.12.2022
    Размер54.43 Kb.
    Формат файлаdocx
    Имя файлаЛаб_раб 5 С - классы.docx
    ТипЛабораторная работа
    #859888

    Лабораторная работа №5

    КЛАССЫ


    Цель работы: изучить определение и использование классов С++.

    Порядок выполнения работы


    1. Изучить:

      1. терминологию, которая связана с классами;

      2. формат определения класса;

      3. формат доступа к полям и методам класса;

      4. конструкторы, перегрузка конструкторов;

      5. деструкторы;

      6. статические поля и методы класса.

    2. Выполнить общее задание 1

    3. Выполнить общее задание 2

    4. Выполнить задание 3 по варианту

    5. Оформить отчет

    Требования к оформлению работы


    Отчет по лабораторной работе должен быть оформлен согласно разработанному образцу: шрифт TimesNewRoman, 12пт, интервал между строк – одинарный, номер страницы на титульном листе не ставится, в колонтитуле ставится номер лабораторной работы и исполнитель.

    Отчёт должен иметь следующие разделы:

    1. Титульный лист

    2. Теоретическая часть

    3. Практическая часть

      1. Формулировка задания

      2. Код программы

      3. Результаты работы программы

    4. Заключение



    Задания для выполнения

    1 задание общее:


    Описать класс Point – точка на плоскости, имеющая 2 координаты, конструктор и методы (функции-члены):

    • задать точку,

    • вывести координаты точки,

    • сдвиг точки,

    • длина вектора из начала координат,

    • поворот точки на 90 градусов по часовой стрелке вокруг начала координат.

    Протестировать работоспособность элементов класса.

    2 задание по вариантам


    1. Создать класс комплексное число. Комплексное число представить 2 вещественными числами (действительная и мнимая часть числа). Реализовать методы класса: ввод числа, печать числа, сложение двух чисел, умножение двух комплексных чисел. Проверить работоспособность методов.

    2. Создать класс комплексное число. Комплексное число представить 2 вещественными числами (действительная и мнимая часть числа). Реализовать методы класса: ввод числа, печать числа, разность двух чисел, деление двух комплексных чисел. Проверить работоспособность методов.

    3. Создать класс комплексное число. Комплексное число представить 2 вещественными числами (действительная и мнимая часть числа). Реализовать методы класса: ввод числа, печать числа, сложение двух чисел, вычисление модуля комплексного числа. Проверить работоспособность методов. Решить задачу: дан массив A – массив комплексных чисел. Получить массив C, элементами которого будут модули сумм двух рядом стоящих комплексных чисел.

    4. Создать класс комплексное число. Комплексное число представить 2 вещественными числами (действительная и мнимая часть числа). Реализовать методы класса: ввод числа, печать числа, возведение комплексного число в степень n (n – натуральное). Решить задачу: дан массив A [M] – массив комплексных чисел. Получить матрицу B [N][ M], каждая строка которой получается возведением в степень, равную номеру этой строки, соответствующих элементов данного массива A.

    5. Создать класс вектор на плоскости. Вектор представить двумя вещественными координатами. Реализовать конструкторы и методы класса: ввод вектора, печать вектора, длина вектора. Решить задачу: дан массив A – массив векторов. Отсортировать его в порядке убывания длин векторов.

    6. Создать класс вектор на плоскости. Вектор представить двумя вещественными координатами. Реализовать конструкторы и методы класса: ввод вектора, печать вектора, длина вектора. Решить задачу: с помощью датчика случайных чисел сгенерировать 2N целых чисел - векторов. Вывести номер самого длинного вектора.

    7. Создать класс вектор на плоскости. Вектор представить двумя вещественными координатами. Реализовать конструкторы и методы класса: ввод вектора, печать вектора, сложение двух векторов, разность двух векторов. Проверить работоспособность методов.

    8. Создать класс вектор на плоскости. Вектор представить двумя вещественными координатами. Реализовать конструкторы и методы класса: ввод вектора, печать вектора,. скалярное умножение векторов, умножение вектора на число. Проверить работоспособность методов.

    9. Создать класс р-ичное число. Число в р-ичной системе счисления характеризуется основанием системы (2<=p<=9) и значением числа, представленным в виде массива цифр (длина числа<64). Реализовать конструкторы и методы класса: печать числа, сложение двух чисел, вычитание двух чисел. Проверить работоспособность методов.

    10. Создать класс р-ичное число. Число в р-ичной системе счисления характеризуется основанием системы (2<=p<=9) и значением числа, представленным в виде массива цифр (длина числа<64). Реализовать конструкторы и методы класса: печать числа, сложение двух чисел, умножение двух чисел. Проверить работоспособность методов.

    11. Создать класс р-ичное число. Число в р-ичной системе счисления характеризуется основанием системы (2<=p<=9) и значением числа, представленным в виде массива цифр (длина числа<64). Реализовать конструкторы и методы класса: печать числа, перевод из десятичной системы счисления в р-ичную. Проверить работоспособность методов.

    12. Создать класс р-ичное число. Число в р-ичной системе счисления характеризуется основанием системы (2<=p<=9) и значением числа, представленным в виде массива цифр (длина числа<64). Реализовать конструкторы и методы класса: печать числа, перевод из P-ичной системы счисления в десятичную. Проверить работоспособность методов.

    13. Создать класс р-ичное число. Число в р-ичной системе счисления характеризуется основанием системы (2<=p<=9) и значением числа, представленным в виде массива цифр (длина числа<64). Реализовать конструкторы и методы класса: печать числа, логическая функция проверки правильности записи числа в p-ичной системе счисления, проверки равенства двух чисел. Проверить работоспособность методов.

    14. Создать класс р-ичное число. Число в р-ичной системе счисления характеризуется основанием системы (2<=p<=9) и значением числа, представленным в виде массива цифр (длина числа<64). Реализовать конструкторы и методы класса: печать числа, функции, реализующие операции отношения (равно, больше, меньше). Проверить работоспособность методов.

    15. Создать класс 16-ричное число. Число в 16-ричной системе счисления характеризуется значением числа, представленным в виде массива цифр (длина числа<64). Реализовать конструкторы и методы класса: печать числа, логическая функция проверки правильности записи числа в 16-ричной системе счисления, проверки равенства двух чисел. Проверить работоспособность методов.

    16. Создать класс 16-ричное число. Число в 16-ричной системе счисления характеризуется значением числа, представленным в виде массива цифр (длина числа<64). Реализовать конструкторы и методы класса: печать числа, перевод из 16-ричной системы счисления в десятичную. Проверить работоспособность методов.

    17. Создать класс вектор в пространстве. Вектор представить тремя вещественными координатами. Реализовать конструкторы и методы класса: ввод вектора, печать вектора, длина вектора. Решить задачу: дан массив A – массив векторов. Отсортировать его в порядке убывания длин векторов.

    18. Создать класс вектор в пространстве. Вектор представить тремя вещественными координатами. Реализовать конструкторы и методы класса: ввод вектора, печать вектора, длина вектора. Решить задачу: с помощью датчика случайных чисел сгенерировать 2N целых чисел - векторов. Вывести номер самого длинного вектора.

    19. Создать класс вектор в пространстве. Вектор представить тремя вещественными координатами. Реализовать конструкторы и методы класса: ввод вектора, печать вектора, сложение двух векторов, разность двух векторов. Проверить работоспособность методов.

    20. Создать класс вектор в пространстве. Вектор представить тремя вещественными координатами. Реализовать конструкторы и методы класса: ввод вектора, печать вектора, скалярное умножение векторов, умножение вектора на число. Проверить работоспособность методов.



    Примеры к лабораторной работе

    Пример 1: класс комплексное число со статической переменной- счетчиком объектов класса

    #include

    #include

    #include

    using namespace std;
    class Complex {

    double re, im; //действительная и мнимая часть числа, по умолчанию private

    static int counter; //статическая переменная- счетчик объектов класса

    public:

       Complex () { -- counter; } //деструктор класса
    static int get_counter() { return counter; } // статический метод, возвращающий значение счетчика

    Complex(double a_re, double a_im) // конструктор

    {re = a_re; im = a_im; counter++;}

    Complex(){ re = 0; im = 0; counter++;} // конструктор по умолчанию

    double getRe () { return re; }

    double getIm () { return im; }

    void setRe (double a_re) { re = a_re; }

    void setIm (double a_im) { im = a_im; }

    double modulo () { return sqrt(re*re + im*im); }

    };

    int Complex::counter=0; // определение статической переменной вне класса

    int main()

    {

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    cout << "Currently " << Complex::get_counter() << " objects exist" << endl;

    Complex a(2,3), *b = new Complex;

    Complex *c = new Complex(1,8);

    cout << "Currently " << a.get_counter() << " objects exist" << endl;

    delete c;

    cout << "Currently " << b->get_counter() << " objects exist" << endl;

    cout << "Модуль числа а("<


    Теоретические сведения


    Класс является абстрактным типом данных, определяемым пользователем, и представляет собой модель реального объекта в виде данных и функций для работы с ними.

    Данные класса (данные-члены) называются полями (по аналогии с полями структуры), а функции класса (функции-члены) — методами. Поля и методы называются элементами класса.

    Описание класса в первом приближении выглядит так:

    class <имя>{

    [ private: ]

    <описание скрытых элементов>

    public:

    <описание доступных элементов>

    }; // Описание заканчивается точкой с запятой

    Спецификаторы доступа private и public управляют видимостью элементов класса.

    Элементы, описанные после служебного слова private, видимы только внутри класса. Этот вид доступа принят в классе по умолчанию.

    Интерфейс класса описывается после спецификатора public. Действие любого спецификатора распространяется до следующего спецификатора или до конца класса. Можно задавать несколько секций private и public, порядок их следования значения не имеет.

    Поля класса:

    • могут иметь любой тип, кроме типа этого же класса (но могут быть указателями или ссылками на этот класс);

    • могут быть описаны с модификатором const, при этом они инициализируются только один раз (с помощью конструктора) и не могут изменяться;

    • могут быть описаны с модификатором static;

    • инициализация полей при описании не допускается.
    Конструкторы - это специальная разновидность функций-членов с таким же именем, как у своего класса. Например, A::A() - конструктор для класса A.

    У конструкторов нет типа возвращаемого значения, для них нет самого понятия "возвращаемое значение". Но у них может быть список аргументов, и к ним применяются обычные правила для перегрузки функций. Из того, что они отвечают за инициализацию вновь создаваемых объектов, вытекает одна их важная особенность - в тот момент, когда работает конструктор, объект еще не создан, под него только выделена память.

    Деструктор - это тоже специальная функция-член, ее имя формируется добавлением перед именем класса значка (тильда), например, A::A() - деструктор для класса A.

    Как и у конструкторов, у деструктора нет типа возвращаемого значения. В отличие от конструкторов, у деструктора не может быть параметров, поэтому не бывает перегружаемых деструкторов. Обычно деструкторы вызываются автоматически непосредственно перед тем, как программа освободит память, отведенную под объект (например, когда автоматический объект выходит из области видимости). Но при необходимости можно вызвать деструктор и явным образом.

    У класса могут быть определенные пользователем конструкторы, или деструктор, или и те и другие, или, наоборот, ни тех, ни других. Если вы не определяете в классе конструкторы и деструкторы, то транслятор автоматически создаст деструктор и конструктор с поведением по умолчанию.

    Статические члены - поля, и функции

    Статическое поле данных класса (static data member) существует в единственном экземпляре независимо от того, сколько объектов этого класса используется в программе. Подобные поля позволяют объектам обмениваться между собой информацией - например, вы с их помощью подсчитать, сколько всего объектов класса работает в данной программе, или хранить в статическом поле последний созданный объект, и так далее.

    Для того, чтобы создать статическое поле данных, нужно проделать две вещи:
    Во-первых, надо объявить поле в теле класса с использованием ключевого слова static:

    class COUNT_OBJECTS {
    public:
      static int counter;
      };

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

    int COUNT_OBJECTS::counter = 0;

    Статические поля существуют независимо от того, сколько объектов класса создано (в том числе даже если нет ни одного объекта). В телах функций-членов класса использование статических полей ничем не отличается от использования обычных:

    class COUNT_OBJECTS {
    public:
      static int counter;
      COUNT_OBJECTS() { counter++; }
      COUNT_OBJECTS() { --counter; }
      };

    Извне обратиться к ним напрямую (если позволяет уровень доступа) можно либо через любой объект этого класса, либо с использованием имени самого класса:

    COUNT_OBJECTS a;
    int n;
    n = a.counter;
    n = COUNT_OBJECTS::counter;

    Статическая функция-член - это метод класса для работы со статическими полями. Ее главное отличие от нестатических функций-членов - отсутствие неявного указателя this.

    Так, более правильно было бы сделать поле counter личным, и написать статическую член-функцию для доступа к нему - тогда мы исключили бы возможность испортить наш счетчик прямым присваиванием значения полю:

    class COUNT_OBJECTS {
    private:
      static int counter;
    public:
      COUNT_OBJECTS() { counter++; }
      COUNT_OBJECTS() { --counter; }
      static int get_counter() { return counter; }
    };

    int COUNT_OBJECTS::counter=0;

    Вызывать статическую функцию-член также можно либо с любым объектом этого типа, либо используя имя класса:

    cout << "Currently " 
      << COUNT_OBJECTS::get_counter() 
      << " objects exist" << endl;

    COUNT_OBJECTS a, b, *c = new COUNT_OBJECTS;

    cout << "Currently " << a.get_counter() 
      << " objects exist" << endl;

    delete c;

    cout << "Currently " << a.get_counter() 
      << "objects exist" << endl;

    Если подобную программу собрать и запустить, она должна напечатать три строки:

    Currently 0 objects exist
    Currently 3 objects exist
    Currently 2 objects exist

    Вот мы и написали класс, который сам считает количество своих объектов.


    написать администратору сайта