protected C++ указание защищенных членов класса

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


#include <iostream> // cout, endl
using namespace std;

class My_class{             // Объявление и определение класса My_class
protected:                  // Объявление защищенных членов класса
    int a = 10;             // Защищенная целочисленная переменная
    int get_a(){            // Защищенная функция
        return a;           // К защищенным членам можно обращаться внутри класса
    }
    int b = get_a();        // К защищенным членам можно обращаться внутри класса
    int c = a;              // К защищенным членам можно обращаться внутри класса
public:                     // Объявление открытых членов класса
    int d = 10;             // Открытая целочисленная переменная
    void print_d(){         // Открытая функция
        cout << d << endl;  // Вывод значения переменной d
    }
};

class My_child_class : public My_class{ // Объявление и определение класса My_child_class производного от класса My_class, с возможностью использовать публичные члены базового класса
    public:                 // Объявление открытых членов класса
    int get_child_a(){      // Объявили открытую функцию
        return My_class::a; // В производном классе можно обращаться к защищенным членам родительского класса
    }
};

int main(){
    My_child_class obj;         // Создали объект obj класса My_class
    // int s = obj.a;           // Ошибка! Нельзя обращаться к защищенным членам класса (к переменной а)
    // int si = obj.get_a();    // Ошибка! Нельзя обращаться к защищенным членам класса (к функции get_a() )
    // int siz = obj.b;         // Ошибка! Нельзя обращаться к защищенным членам класса (к переменной b)
    // int size = obj.c;        // Ошибка! Нельзя обращаться к защищенным членам класса (к переменной c)
    int dd = obj.d;             // Можно использовать открытые члены от базового класса (переменную d)
    obj.d = 20;                 // Можно использовать открытые члены от базового класса и для записи (переменную d)
    obj.print_d();              //20 Можно использовать открытые члены от базового класса (функцию print_d() )
    obj.d = obj.get_child_a();  // Присвоили переменной d результат вызова функции производного класса
    obj.print_d();              //10
}
2023-10-22



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

Конструктор в C++. Конструктор копирования и оператор присваивания.
delete C++ оператор освобождения памяти и спецификатор ограничения доступа
explicit С++ запрет неявных преобразования при вызове конструктора
friend C++ дружественная функция имеющая доступ к закрытым членам класса
mutable C++ изменение членов константного объекта
new C++ динамическое выделение памяти
private С++, С++ приватные члены класса, С++ закрыты члены класса
protected C++ указание защищенных членов класса
public С++, С++ открытые члены класса
struct С++ структура
this C++ указатель на текущий объект класса
virtual C++ виртуальные функции