Пятница, 2025-06-20, 5:32 PM
Приветствую Вас Гость | RSS
Главная | Базовые классы | Регистрация | Вход
Меню сайта
Вход на сайт
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Программирование

    Базовые классы. Классы и члены в Си. Получение доступа к членам класса. Ограничение доступа к членам класса. Определение методов класса. Конструкторы и деструкторы в С++. Вложенные классы. Структуры

     

    Классы

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

    Для объявления класса используется ключевое словоclass. Пример:

     

    Class Cat
    {
    unsigned int Age;
    unsigned int Weight;
    void Meow();
    };

    Объявление класса не резервирует память под данные, здесь только сообщается: о существование класса с таким именем и сколько памяти требуется для каждого объекта этого класса (память выделяется под данные-члены, под методы память не выделяется.

    Определение объектов происходит так:

    Cat Vaska;

    Доступ к членам класса

    Существует оператор прямого доступа (.)

    Vaska.Weight =5;
    Vaska.Meow();

    Рекомендации:

    1. используйте ключевое слово class для объявления класса.
    2. используйте оператор прямого доступа к членам класса и его методам.
    3. не путайте объявление с определением.
    4. не путайте класс с объектом.
    5. не присваивайте значения классу.

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

    Определение доступности и скрытости для членов класса иммет принципиальное значение.

    Class Cat
    {
    unsigned int Age;
    unsigned int Weight;
    void Meow();
    };

    а затем в main()

    cat Vaska;
    Vaska.Age=5;

    Вызовет ошибку компиляции, так как все члены класса Сat закрыты, а присвоение идёт во внешней к классу функции.
    Поэтому необходимо сделать:

     

    Class Cat
    {public:
    unsigned int Age;
    unsigned int Weight;
    void Meow();
    };

     

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

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

    #include<iostream.h>
    #include <alloc.h>
    #include <math.h>
    #include <stdlib.h>
    class Mass
    {
    int *Arrey;
    int n;
    public:
    int getSize();
    void putSize(int ss);
    void getArrey(int ras);
    int putArrey();
    void del();
    };
    void Mass::getArrey(int ras)
    { int i;
    randomize();
    Arrey = new int[n];
    for(i=0;i<n;i++)
                (Arrey+i)=random(2*ras)-ras;
    }
    int Mass::putArrey()
    { int i;
    for(i=0;i<n;i++)
                cout<<*(Arrey+i)<<"\t";
    cout <<"\n";
    return 0;
    }

    int Mass::getSize()
      {  return n;
      }

    void Mass::putSize(int ss)
      {n=ss;
      }

    void Mass::del()
    {delete[] Arrey;
    }

    int main(void)
    {

    int ss,m,size=100;
    Mass Arrey;
    cout <<"Введите размерность массива\n по строкам:";
    cin >>ss;
    Arrey.putSize(ss);
    cout << "размерность массива = "<<Arrey.getSize()<<"\n";
    Arrey.getArrey(100);
    Arrey.putArrey();
    Arrey.del();
    Arrey.putArrey();
    return 0;
    }

    Любую переменную можно инициализировать, то есть присвоить ей значения, для инициализации объектов класса существуют специальные функции — конструкторы. Имя конструктора совпадает с именем класса, при необходимости он может принимать параметры, но не может возвращать значения даже типа void. Для примера: Arrey(). Если пользователь не объявляет конструктор, то существует конструктор по умолчанию, который ничего не делает, но он есть. Соответственно существует функции уничтожающая объекты класса — деструктор, она очень похожа на конструктор по своим свойствам. Зачастую наличие конструктора (стандартного, который ничего не делает) необходимо по протоколу. Имя деструктора ~Arrey.

    Домашняя работа написать предложенную программу, так что бы в ней были конструктор с 3-мя параметрами и деструктор.

    uCozCopyright MyCorp © 2025