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

  • Конструкторы

  • Курс ООП в С презентация. ООП в с++(полный курс). Объекты и классы


    Скачать 1.76 Mb.
    НазваниеОбъекты и классы
    АнкорКурс ООП в С презентация
    Дата21.02.2022
    Размер1.76 Mb.
    Формат файлаppt
    Имя файлаООП в с++(полный курс).ppt
    ТипДокументы
    #368655
    страница4 из 26
    1   2   3   4   5   6   7   8   9   ...   26

    Конструкторы


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

    Конструкторы


    Основные свойства конструкторов:
      Конструктор не возвращает значение, даже типа void. Также нельзя получить указатель на конструктор.
      Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется механизм перегрузки).
      Конструктор, вызываемый без параметров, называется конструктором по умолчанию.
      Параметры конструктора могут иметь любой тип, кроме этого же класса. Можно задавать значения параметров по умолчанию, но их может содержать только один из конструкторов.
      Если программист не указал ни одного конструктора, компилятор создает его автоматически. В случае, когда класс содержит константы или ссылки, при попытке создания объекта класса будет выдана ошибка, по­скольку их необходимо инициализировать конкретными значениями, а конструктор по умолчанию этого делать не умеет.
      Конструкторы не наследуются.
      Конструкторы нельзя описывать с модификаторами const, virtual и static.
      Конструкторы глобальных объектов вызываются до вызова функции main. Локальные объекты создаются, как только становится активной область их действия. Конструктор запускается и при создании временного объекта (например, при передаче объекта из функции).

    Конструкторы


    Конструктор вызывается, если в программе встретилась какая-либо из синтаксических конструкций:
    имя_класса имя_объекта [(список параметров)];
    //список параметров не должен быть пустым имя класса (список параметров);
    //создается объект без имени, список может быть пустым имя_класса имя_объекта = выражение;
    //создается объект без имени и копируется
    Напомним, что прежде, чем использовать классы для создания их экземпляров, мы должны обеспечить видимость их описаний для самой программы:
    //подключаем часто используемые, но редко изменяемые файлы
    #include "stdafx.h"
    //подключаем заголовочный файл описания класса
    #include "person.h"

    Конструкторы


    Конструктор без параметров используется для создания "пустого" объекта.
    //реализация конструктора без параметров
    person::person()
    {
    name = new char[1]; //выделяем память под один символ
    name[0] = '\0'; //помещаем туда символ конца строки
    year = 0; //"год рождения" приравниваем к нулю
    }
    Конструктор с параметрами используется для создания объекта с определенным начальным состоянием.
    //реализация конструктора с параметрами
    person::person(char* n, int y)
    {
    name = new char[strlen(n)+1];
    strcpy(name, n);
    year = y;
    }

    Конструкторы


    Существует еще один способ инициализации полей в конструкторе – с помощью списка инициализаторов, расположен­ных после двоеточия между заголовком и телом конструктора. Без этого способа не обойтись при инициализации полей-констант, полей-ссылок и полей-объектов. Проиллюстрируем его на примере объекта, описывающего некоторую группу лиц и хранящего ссылку name на строку с наименованием группы, которая должна быть определена вне области видимости нашего класса group.
    Заметим, что такой тип атрибута как ссылка, требует обязательной инициализации. Соответственно, наличие конструктора без параметров в такой ситуации неприемлемо и будет только вызывать сообщение компилятора об ошибке.

    Конструкторы


    class group
    {
    public:
    group(string& n);
    const string& get_name();
    private:
    person Persons[10];
    string& name;
    };
    Инициализаторы атрибутов перечисляются через запятую. Для каждого атрибута в скобках указывается начальное значение, которое может быть выражением:
    group::group(string &n) : name(n)
    {
    }

    Конструкторы


    Ниже представлен массив указателей на строку Names, значения которых мы определяем с помощью оператора new при создании самих строк. Далее определяется объект класса group, с которым связывается та строка, адрес которой содержит элемент Names[0], для чего вызывается соответствующий конструктор.
    string* Names[3];
    Names[0] = new string("ASU-00-0");
    Names[1] = new string("ASU-02-2");
    Names[2] = new string("ASU-92-1");
    group G(*Names[0]);
    cout << G.get_name() << endl;
    *Names[0] = *Names[2];
    cout << G.get_name() << endl;
    cout << *Names[1] << endl;
    Names[0] = Names[1];
    cout << G.get_name() << endl;

    1   2   3   4   5   6   7   8   9   ...   26


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