Читайте также:
|
|
Существуют три уровня доступа к данным и функциям, входящим в класс, для каждого из которых предусмотрен свой спецификатор.
1. Данные или функции, описанные после ключевого слова public, являются открытыми (общедоступными). Это означает, что к ним можно обращаться, откуда угодно: из функций данного класса, из функций других классов, из программы. Обычно открывают функции общего назначения, чтобы с их помощью можно было бы посылать сообщения объектам.
2. Данные и функции, описанные после ключевого слова private, являются закрытыми (частными, приватными). Это означает, что к ним можно обращаться только из функций данного класса (открытых или закрытых), из программы к ним обратится нельзя. Обычно данные класса закрывают, выполняется,так называемый, принцип инкапсуляции данных внутри объекта. Иногда закрывают также и функции, если они обслуживают внутренние задачи класса.
3. Данные и функции, описанные после ключевого слова protected, являются защищенными. Такие члены класса доступны только данному классу и классам, производным от данного. Защищенные отличаются от закрытых членов класса, если имеет место наследование.
Закрытые члены класса недоступны и в производных классах.
Ключевые слова public, private, protected могут встречаться в описании класса в любом порядке и количестве.
По умолчанию (без использования спецификаторов доступа),
если класс определен с помощью ключевого слова struct, то все компоненты класса являются общедоступными, статус – public ( не выполняетcя принцип
инкапсуляции данных внутри объекта);
в классах – объединениях union все элементы класса общедоступны,
но в каждый момент времени исполнения программы объект такого класса содержит только один компонент класса
(многократное использование одних и тех же участков памяти для разных целей);
все компоненты класса, определение которого начинается со служебного слова class недоступны для внешних обращений - статус private.
Изменить статус доступа компонент при определении класса позволяют спецификаторы доступа: public - общедоступный, private – собственный, protected – защищенный, за которыми помещается двоеточие.
Если в определении появился спецификатор доступа, то до следующего спецификатора все компоненты класса будут иметь указанный статус
(protected и private эквивалентныпри использовании классов без порождений).
Как правило, данные объявляют со статусом private, а компонентные функции, с помощью которых можно изменять эти данные, объявляют со статусом public.
class A {
int X; // закрытое по умолчанию данное - член
int Y; // то же
void f (); // закрытая по умолчанию функция - член
protected:
void init (); // защищенная функция, доступная в производных
// классах
public:
void setX (int); // открытая функция
void setY (int); // то же
};
Если статический компонент класса имеет статус private или protected, то к нему извне можно обращаться только через компонентные функции, при наличии уже определенного объекта.
Возможность обращения к статическому элементу без имени конкретного объекта (и до объявления объектов) дает статическая компонентная функция, определенная в классе со спецификатором static.
Такая функция сохраняет все свойства обычных компонентных функций,
Но дополнительно такую функцию можно вызвать
имя класса:: имя статической функции
Такие функции можно вызывать до определения конкретных объектов класса, и не используя конкретных объектов.
#include <iostream.h>
class goods1 // класс “ товар1”
{ // закрытые по умолчанию данные – члены класса
char name[40]; // наименование товара
float price; // закупочная цена
static int percent; // торговая наценка
public: // открытые члены класса
// компонентные функции:
void vvod () // ввод данных о товаре
{ cin >> name;
cin>> price; }
static void SetPer (int newper) // статическая функция для
{ preset = newper;} // изменения статического элемента
void vivod () // вывод данных о товаре
{ cout <<”\n” << name;
cout <<”: Розничная цена =”<< price*(1.0+ goods::percent*0.01);}
};
int goods::percent =25; // внешнее описаниеи инициализация
// статического компонента
Дата добавления: 2015-07-20; просмотров: 92 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Такой элемент должен быть определен в классе как статический. | | | Конструкторы и деструкторы |