Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / Лекции 1-2.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
142.98 Кб
Скачать

Int main () {

DateStruct date;

date.day = 12;

date.month = 11;

date.year = 2018;

return 0;

}

Здесь мы объявляем структуру DateStruct, а затем напрямую обращаемся к её членам для их инициализации. Это работает, так как все члены структуры являются открытыми по умолчанию. 

Открытые члены (или «public-члены») — это члены структуры или класса, к которым можно получить доступ извне этой же структуры или класса.

В программе, приведенной выше, функция main () находится вне структуры, но она может напрямую обращаться к членам day, month и year, так как они являются открытыми.

С другой стороны, рассмотрим класс:

class DateClass // члены класса являются закрытыми по умолчанию

{

int m_day; // закрыто по умолчанию

int m_month; // закрыто по умолчанию

int m_year; // закрыто по умолчанию

};

Int main () {

DateClass date;

date.m_day = 12; // ошибка

date.m_month = 11; // ошибка

date.m_year = 2018; // ошибка

return 0;

}

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

Закрытые члены (или «private-члены») — это члены класса, доступ к которым имеют только другие члены этого же класса.

Поскольку функция main () не является членом DateClass, то она и не имеет доступа к закрытым членам объекта date.

Хотя члены класса являются закрытыми по умолчанию, мы можем сделать их открытыми, используя ключевое слово public:

class DateClass {

public: // обратите внимание на ключевое слово public и двоеточие

int m_day; // открыто, доступ имеет любой объект

int m_month; // открыто, доступ имеет любой объект

int m_year; // открыто, доступ имеет любой объект

};

int main() {

DateClass date;

date.m_day = 12; //так как m_day имеет спецификатор доступа public

date.m_month = 11; //так как m_month имеет специф. доступа public

date.m_year = 2018; //так как m_year имеет специф. доступа public

return 0;

}

Поскольку теперь члены класса DateClass являются открытыми, то к ним можно получить доступ напрямую из функции main().

Ключевое слово public вместе с двоеточием называется спецификатором доступа. 

Каждый из членов «приобретает» уровень доступа в соответствии со спецификатором доступа (или, если он не указан, в соответствии со спецификатором доступа по умолчанию).

В языке C++ есть 3 уровня доступа:

    спецификатор public делает члены открытыми;

    спецификатор private делает члены закрытыми;

  спецификатор protected открывает доступ к членам только для дружественных и дочерних классов (детально об этом на соответствующем уроке).

Использование спецификаторов доступа

Классы могут использовать (и активно используют) сразу несколько спецификаторов доступа для установки уровней доступа для каждого из своих членов.

Обычно переменные-члены являются закрытыми, а методы — открытыми.

Правило: Устанавливайте спецификатор доступа private переменным-членам класса и спецификатор доступа public  методам класса (если у вас нет веских оснований делать иначе).

Рассмотрим пример класса, который использует спецификаторы доступа private и public:

#include <iostream>

class DateClass // члены класса закрытые по умолчанию

{

int m_day; // закрыто по умолчанию

int m_month; // закрыто по умолчанию

int m_year; // закрыто по умолчанию

public:

void setDate (int day, int month, int year) // метод открыт

{

// Метод setDate () имеет доступ к закрытым членам класса, так как //сам является членом класса

m_day = day;

m_month = month;

m_year = year;

}

void print() // открыт, доступ имеет любой объект программы

{

std::cout << m_day << "/" << m_month << "/" << m_year;

}

};