Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Существуют три уровня доступа к данным и функциям, входящим в класс, для каждого из которых предусмотрен свой спецификатор.
1. Данные или функции, описанные после ключевого слова public, являются открытыми (общедоступными). Это означает, что к ним можно обращаться, откуда угодно: из функций данного класса, из функций других классов, из программы. Обычно открывают функции общего назначения, чтобы с их помощью можно было бы посылать сообщения объектам.
2. Данные и функции, описанные после ключевого слова private, являются закрытыми (частными, приватными). Это означает, что к ним можно обращаться только из функций данного класса (открытых или закрытых), из программы к ним обратиться нельзя. Обычно данные класса закрывают, выполняется, так называемый, принцип инкапсуляции данных внутри объекта. Иногда закрывают также и функции, если они обслуживают внутренние задачи класса.
3. Данные и функции, описанные после ключевого слова protected, являются защищенными. Такие члены класса доступны только данному классу и классам, производным от данного. Защищенные отличаются от закрытых членов класса, если имеет место наследование.
Закрытые члены класса недоступны и в производных классах.
Ключевые слова public, private, protected могут встречаться в описании класса в любом порядке и количестве.
По умолчанию (без использования спецификаторов доступа):
- если класс определен с помощью ключевого слова struct, то все компоненты класса являются общедоступными - глобальны, их статус – public ( не выполняется принцип инкапсуляции данных внутри объекта);
- в классах – объединениях 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;
// внешнее описаниеи инициализация статического компонента
/* т.к. percent – собственный (закрытый) компонент класса, то последующее обращение к нему возможно только с использованием объектов и открытых компонентных функций или используя общедоступную статическую компонентную функцию */
Дата публикования: 2014-11-28; Прочитано: 618 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!