Void main (void)

Пример

#include <iostream.h>

struct goods // класс “ товар”

{ char name[40]; // наименование товара

float price; // закупочная цена

static int percent; // торговая наценка – статический компонент

// компонентные функции:

void vvod () // ввод данных о товаре

{ cin >> name; cin>> price; }

void vivod () // вывод данных о товаре

{ cout <<”\n” << name;

cout <<”: Розничная цена =”

<< price*(1.0+ goods::percent*0.01);

}

};

int goods::percent =25; // инициализация статического компонента

// статический элемент получает память

// и становится доступным даже без объявления

// объектов

{

goods top [5] ={ { “Костюм “, 10000}, { “Шляпа”, 1100 } };

// инициализация двух объектов из пяти при объявлении массива объектов

for (int i =2; i <5; i++) top [i].vvod();

// вводятся данные в объекты массива с помощью компонентной функции

for(i =0; i<5; i++) top[i].vivod();

// выводятся данные о товарах

goods::percent =30;

// присваивается другое значение статическому компоненту

goods* ptr = top;

// объявлен указатель на объект класса и инициирован

// адресом первого элемента массива top (экв. &top[0])

for(i=0; i <5; i++)

ptr++ -> vivod(); // после каждого вызова функции указатель

// ”настраивается” на следующий элемент

}

При моделировании списка можно ввести класс

class list {

static list * begin; // начало связанного списка

};

list* list:: begin = NULL; // выделение памяти и инициализация

// статического элемента

Доступ к членам класса

Существуют три уровня доступа к данным и функциям, входящим в класс, для каждого из которых предусмотрен свой спецификатор.

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 – собственный (закрытый) компонент класса, то последующее обращение к нему возможно только с использованием объектов и открытых компонентных функций или используя общедоступную статическую компонентную функцию */


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: