Основы программирования на С++ для начинающих

Классы C++

Начиная изучать классы, мы подошли к важному этапу – изучению объектно-ориентированного программирования (ООП) в C++. Классы – довольно обширная тема. Поэтому я разобью её на несколько частей. Таким образом, начинающим будет достаточно просто освоить информацию и разобраться с основами этой темы.

В данном уроке мы познакомимся с синтаксисом классов C++, со спецификаторами доступа к членам (полям) класса (private и public). Узнаем, что такое методы класса и как обращаться к членам класса из программы.

Классы C++ похожи на структуры, но обладают своими особенностями и преимуществами. До этого в программах мы определяли структуры и функции отдельно. В классах они объединены в одно целое, чтобы к закрытым данным класса могли обращаться только функции этого класса. Мне понравилась иллюстрация из книги Объектно-ориентированное программирование в С++” Р. Лафореклассы c++, классы с++ для начинающих, спецификаторы доступа privat и public, методы класса

В наших первых уроках об ООП мы будем рассматривать простые для понимания классы. Сложные примеры будут только отвлекать от важных деталей, которые касаются определения классов и объектов. В заключительном уроке о классах мы подытожим все изученное и ответим на вопросы – зачем нужны классы и в чём заключаются основные принципы ООП.

Сейчас напишем и разберём следующий код:

В строках 4 – 19 находится определение класса. Чтобы объявить класс надо использовать  ключевое слово class и дать ему имя. В фигурных скобках описать его и, в конце поставить ;  точку с запятой.

классы c++, классы  с++ для начинающих, спецификаторы доступа privat и public, методы класса

После объявления имени класса, оно становится именем нового типа данных. С этим типом будут создаваться объекты класса.

В теле класса (между фигурными скобками) могут находиться данные (переменные базовых типов и строки ), функции, принадлежащие классу, структуры, классы…  Всё это чаще называют членами или полями класса.  Функции, которые объявлены и/или определены в теле класса – это методы класса. Далее так их и будем называть. Просто надо запомнить: методы класса – это функции, специально созданные для работы с данными (членами) этого класса.

Рассмотрим новые для вас ключевые слова – private и public. В С++ принято защищать некоторые данные класса  от внешнего вмешательства. То есть, чтобы из главной функции, например, никто не мог напрямую обратиться к этим данным через объект и внести какие-либо изменения.

классы c++, классы  с++ для начинающих, спецификаторы доступа privat и public, методы класса
Попытка обращения к закрытому члену класса из main-функции

Чтобы сделать данные “закрытыми” надо разместить их в поле private . По умолчанию, всё что объявлено в классе, становится закрытым от прямого доступа и доступно только для других членов или методов класса. Так что, если такие данные объявляются в самом верху тела класса, слово private   можно не использовать.

Чтобы объявить открытые члены класса, надо применить ключевое слово public.  В этом поле зачастую находятся методы класса, которые и будут работать с приватными (закрытыми) данными. Публичные (открытые) методы и другие члены класса доступны из любой другой части кода/программы, в которой определен класс. Иногда для работы вам возможно понадобится объявить публичный член класса или приватный метод.

Обратите внимание на определение методов класса. Мы не передаем в них параметры. При этом вносим изменение в переменную number и показываем её на экран. Дело в том, что члены и методы класса находятся в одной области видимости. И методы класса свободно обращаются к данным-членам класса.

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

Чтобы указать, что функция, определенная вне класса, является именно его методом, надо как-то связать имя класса с именем этого метода. Для этого пишем сначала тип возвращаемого значения, затем имя класса, далее операцию расширения области видимости  ::  (двойное двоеточие), имя метода и скобки (с параметрами или без):  void Number::setNumber()  Потом, как обычно, следует определение тела функции в фигурных скобках.

Методы, определённые в  классе, по умолчанию являются inline-функциями (встроенными функциями) в отличии от методов, определённых вне класса.

Так как класс – это некий тип, определённый программистом, то создав   класс   мы   можем   создавать   объекты  этого типа:  Number object; Как мы обсудили раньше, мы не сможем обратиться к приватным членам класса из главной функции. Но мы легко можем с ними работать, через определённые методы класса. Так вызываем эти методы через объект и сначала присваиваем переменной  number значение, а затем показываем на экран.

классы c++, классы  с++ для начинающих, спецификаторы доступа privat и public, методы класса

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

4 thoughts on “Классы C++

  1. Где-то (или здесь в описаниях классов, или раньше, в описаниях структур) нужно бы сказать, что структуры, доставшиеся C++ в наследство от C, и классы – это одно и то же.
    Только по умолчанию для всех членов структуры область видимости определена как public, а в классах – как private. Поэтому мы в классах всегда переопределяем видимость каких-то членв (public, protected) – снизу вверх, от меньшего (private) к большему (public, protected). А в структурах в этом просто не возникает необходимость – сверху вниз.
    Но структуры C++, в отличие от структур C, из-за такой дуальности (с классами) могут также иметь свои собственные функции-методы.

  2. на видео уроке, может кому -то будет полезно , не все компиляторы умные , как у Дениса Маркова. У меня например нужно было добавлять указатель this-> чтоб аварийной ситуации не было . Еще очень мало задач по темам, у вас в начале так хорошо все было, получил информацию-получи и задачу по ней: а сейчас выучи и пойми куча информации(не легкой)а потом уже переходи к задаче.
    #include
    #include

    using namespace std;
    typedef unsigned int ui;

    class accaunt
    {
    private:
    char *ID;
    char*Name;
    ui balance;
    public:
    accaunt(void);
    void setid(char*);
    char * getid();
    void setname(char*);
    char* getname();
    ~accaunt(void);
    ui getbalance();
    void setbalance(ui);
    };
    accaunt::accaunt()
    {
    }
    accaunt::~accaunt()
    {
    }
    void accaunt::setid(char*id)
    {
    this->ID = id;
    };
    char * accaunt::getid()
    {
    return ID;
    }
    void accaunt::setname(char*Name)
    {
    this->Name = Name;
    }
    char * accaunt::getname()
    {
    return Name;

    }
    ui accaunt::getbalance()
    {
    return balance;
    }
    void accaunt::setbalance(ui b)
    {
    this->balance = b;
    }

    int main()
    {
    setlocale(LC_ALL, “rus”);
    accaunt a;
    a.setbalance(123);
    a.setid(“444”);
    a.setname(“Де”);

    cout << a.getbalance() << endl;

    cout << a.getname() << endl;

    cout << a.getid() << endl;
    cin.get();

    return 0;
    }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *