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

  • Файл “Module.h”

  • Файл “func.cpp”

  • Файл “main.cpp”

  • пример_выполнения_лаб №2. Лабораторная работы 2. (вариант 6) Конструирование простейшего класса


    НазваниеЛабораторная работы 2. (вариант 6) Конструирование простейшего класса
    Анкорпример_выполнения_лаб №2.doc
    Дата03.05.2017
    Размер84 Kb.
    Формат файлаdoc
    Имя файлапример_выполнения_лаб №2.doc
    ТипПрограмма
    #1586


    Лабораторная работы №2. (вариант 6)
    Конструирование простейшего класса
    Цель работы : знакомство с основными понятиями ООП. Необходимо выполнить конструирование класса, предназначенного для хранения заданной структуры данных, изучить способы создания объектов.


    Основные понятия: класс, объект, свойство, метод, конструктор, деструктор, полиморфизм, инкапсуляция


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

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


    1. Создание объекта с помощью конструктора по умолчанию

    2. Создание объекта с помощью конструктора с параметрами.

    3. Создание массива объектов.

    4. Редактирование и просмотр свойств каждого объекта.

    5. Обработка массива объектов в соответствии с заданием лабораторной работы №1. Ввод исходных данных осуществляется с клавиатуры, вывод – на экран.



    1.Создаваемая нами программа содержит один класс class Сar{…};

    Этот класс предназначен для хранения информации о машинах, а также средства для обработки этой информации.

    2. Программа содержит еще одну функцию int maxpower(Car *, int);

    Функция определяет машину с самым мощным двигателем.
    Программа состоит из нескольких компонентов. Одним из таких компонентов являются файлы. Мы разделили программу на три файла : main.cpp (файл, в котором хранится главная функция), func.cpp(файл, в котором определены методы класса и внешняя по отношению к классу функция) и, наконец, файл module .h, в котором находятся объявление класса и прототип внешней по отношению к классу функции.
    Текст программы:
    Файл “Module.h”
    #ifndef _MODULE_H //страж включения

    #define _MODULE_H
    #include

    #include

    using namespace std;
    // объявление класса

    class Car {

    public:

    Car();

    Car(string mrk, int pwr, int vlm, string clr);

    Car();

    string Car::GetMark();

    void SetMark(string val);

    int GetPower();

    void SetPower(int val);

    int GetVolume();

    void SetVolume(int val);

    string Car::GetColor();

    void SetColor(string val);

    private:

    string Mark;

    int Power;

    int Volume;

    string Color;

    };

    int maxpower(Car*, int);
    #endif /* _MODULE_H */
    ____________________________________________________________

    Файл “func.cpp”

    // реализация внешней целевой функции и функций – членов класса (методов)

    #include "module.h"

    // целевая, внешняя по отношению к классу функция
    int maxpower (Car*c, int n) {

    int i, max=0, maxnumber=0;

    for(i=0; i
    if(c[i].GetPower()>max) {

    max=c[i].GetPower();

    maxnumber=i;

    }

    }

    cout<<"Car with maximum power is number "<
    return 0;

    }
    Car::Car() {

    // конструктор по умолчанию

    }
    // конструктор с параметрами

    Car::Car(string mrk, int pwr, int vlm, string clr) {

    Mark =mrk;

    Power=pwr;

    Volume=vlm;

    Color=clr;
    }
    Car :: Car() {

    // деструктор по умолчанию – у нас явно в программе не вызывается,

    // его можно в класс не включать

    }
    string Car::GetMark() { //Метод, позволяющий прочитать значение свойства

    return(Mark);

    }

    void Car::SetMark(string val) { // Метод для установки нового значения

    Mark=val; // свойства

    }
    int Car::GetPower() {

    return(Power);

    }
    void Car::SetPower(int val) {

    Power=val;

    }
    int Car::GetVolume() {

    return(Volume);

    }
    void Car::SetVolume(int val) {

    Volume=val;

    }
    string Car::GetColor() {

    return(Color);

    }
    void Car::SetColor(string val) {

    Color=val;

    }

    Файл “main.cpp”
    // главная программа, использующая класс
    #include "module.h"
    int main() {

    int k;

    Car C1; // вызов конструктора по умолчанию

    Car C2("Toyota", 130, 50, "Green"); // вызов конструктора с параметрами

    C1.SetMark("Nissan"); // Обращаемся к элементам объекта

    C1.SetPower(150); // через имя объекта, поэтому используем

    C1.SetVolume(60); // точку (.).Получить или изменить значение

    C1.SetColor("Red"); // элемента со спецификатором private можно

    // только через обращение к соответствующим

    // методам (SetVolume, SetColor и др.)

    cout<
    cout<
    Car C3[10];

    string str1, str2;

    int val1, val2;

    cout<<"Vvedite kol-vo elementov -> ";

    cin>>k;

    for(int i=0; i
    cout<<"Enter mark -> ";

    cin>>str1;

    C3[i].SetMark(str1);

    cout<<"Enter power -> ";

    cin>>val1;

    C3[i].SetPower(val1);

    cout<<"Enter volume -> ";

    cin>>val2;

    C3[i].SetVolume(val2);

    cout<<"Enter color -> ";

    cin>>str2;

    C3[i].SetColor(str2);

    }

    for(int i=0; i
    maxpower(C3,k);

    return 0;

    }

    Замечания
    Объект = данные + операции (методы)

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

    Функции класса – это методы.

    Видимость элементов класса управляется спецификаторами доступа – public (описывает интерфейс класса) и private ( видимость только внутри класса).
    Доступ к элементам объекта такой же как к полям структуры.( используется операция .(точка) при обращении к элементу через имя объекта, или операция -> при обращении через указатель. Это касается только обращения к элементам со спецификатором public. Получить или изменить значения элементов со спецификатором private можно только через обращение к соответствующим методам.

    Итак, в ООП каждый объект принадлежит определенному классу.
    Класс – это основной инструмент, с помощью которого осуществляется инкапсуляция и сокрытие данных.


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

    Константы и переменные класса называются полями.
    Доступ к полям класса возможен только через вызов соответствующих методов.

    Инкапсуляция – это ограничение доступа к данным и их объединение с методами, обрабатывающими эти данные. Доступ к отдельным частям класса регулируется с помощью специальных ключевых слов:

    • public(открытая часть),

    • private (закрытая часть) и

    • protected( защищенная часть).


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

    Доступ к закрытой части класса возможен только из его собственных методов.

    Доступ к защищенной части возможен из его собственных методов и из методов классов – потомков. Все это повышает надежность программ.

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


    • Конструктор носит то же имя, что и сам класс, в котором он определен.




    • Конструктор ничего не возвращает в точку вызова, поэтому при объявлении он не должен иметь описатель типа возвращаемого значения. Это значит, что конструктор не может быть явно вызван из пределов программы. Конструктор явно вызывается самим компилятором при создании объекта, либо неявно вызывается при выполнении оператора new применяемого к объекту при динамическом распределении памяти, а также неявно вызывается при копировании объекта данного класса.




    • Если все параметры конструктора имеют значение по умолчанию или если конструктор вовсе не имеет параметров, то он называется конструктором по умолчанию. Такой конструктор имеет несколько областей применения. Его используют, если компилятор встречает определение массива объектов, как это происходит у нас во второй лабораторной работе при конструировании простейшего класса. У нас объявлен массив из нескольких объектов, и каждый объект этого массива создан путем вызова конструктора по умолчанию. И если бы не было у нас конструктора по умолчанию, то мы не смогли бы объявлять массивы этого класса.

    Мы столкнемся с конструктором по умолчанию и в четвертой

    лабораторной работе, когда будем изучать механизм наследования.

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


    • Деструктор имеет такое же имя как и класс, но предваряется символом (тильда).

    • Объект, созданный как локальная переменная в некотором блоке, уничтожается неявно, когда при выполнении программы будет достигнут конец блока. Деструктор особенно важен, если память выделяется динамически из области так называемой кучи (heap).Такая память освобождается явно с помощью операции delete.

    • В отличии от конструктора деструктор не может получать аргументы и быть перегружен.



    Выводы


    • Введено понятие ООП, присущее только С++.

    • Определен новый тип данных – класс(class), который в свою очередь позволяет определять объекты данных (object) и связывать с ними операции и функции. Объектами или экземплярами класса называются конкретные переменные типа данных “класс”.

    • Входящие в класс константы и переменные называются полями, а функции класса называются методами. Поля и методы называются членами класса.

    • Особыми методами являются конструктор и деструктор.

    • Программы, разработанные на основе ООП, реализуют алгоритмы, описывающие взаимодействие между объектами.

    • Основные принципы ООП :

    инкапсуляция,

    полиморфизм,

    наследование.
    Простое объявление класса выглядит так:
    сlass MyClass {

    public:

    //член класса может использоваться любой функцией

    private:

    // член класса может использоваться только функциями-

    членами и функциями- друзьями того класса, где он описан

    protected:

    //как и private , но еще и функциями-наследниками

    } ; //обратите внимание на завершающую точку с запятой!

    Создание объекта:
    MyClass MyObject ;




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