Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c_1_po_16.docx
Скачиваний:
5
Добавлен:
06.12.2018
Размер:
71.4 Кб
Скачать

1)Классы, объявление классов, спецификаторы доступа.

Класс является абстрактным типом данных, определяемым пользователем,

и представляет собой модель реального объекта в виде данных и функций для

работы с ними.

Данные класса называются полями (по аналогии с полями структуры), а функции

класса — методами. Поля и методы называются элементами класса. Описание(объявление)

класса в первом приближении выглядит так:

class <имя>{

[ private: ]

<описание скрытых элементов>

public:

<описание доступных элементов>

} ; / / Описание заканчивается точкой с запятой

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

Возможность скрывать внутренние детали при описании общего интерфейса для типа, определенного пользователем, называется инкапсуляцией. В С++ она реализована через объявления class и struct в соединении с ключевыми словами private (закрытый), protected (защищенный) и public (открытый), определяющими уровень доступа.

Т.е. спецификаторы доступа private и рubliс управляют видимостью элементов класса.

Элементы, описанные после служебного слова private, видимы только внутри

класса. Этот вид доступа принят в классе по умолчанию. Интерфейс класса опи-

cывается после спецификатора public. Действие любого спецификатора распространяется

до следующего спецификатора или до конца класса. Можно задавать

несколько секций private и public, порядок их следования значения не имеет.

2)Классы, поля классов, инкапсуляция.

Возможность скрывать внутренние детали при описании общего интерфейса для типа, определенного пользователем, называется инкапсуляцией. В С++ она реализована через объявления class и struct в соединении с ключевыми словами private (закрытый), protected (защищенный) и public (открытый), определяющими уровень доступа.  Сам класс определяется как список своих членов, а именно полей (свойств) и методов/функций/процедур. Классы могут задавать поля — то есть переменные, принадлежащие либо непосредственно самому классу (статические), либо экземплярам класса (обычные)

Поля класса:

• могут иметь любой тип, кроме типа этого же класса (но могут быть указателями

или ссылками на этот класс);

• могут быть описаны с модификатором const, при этом они инициализируются

только один раз (с помощью конструктора) и не могут изменяться;

• могут быть описаны с модификатором static, но не как auto, extern и register.

Инициализация полей при описании не допускается.

3)Методы и их реализация на примере класса «Комплексное число».

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

Предположим, в программе необходимо оперировать комплексными числами. Комплексные числа состоят из вещественной и мнимой частей, и с ними можно выполнять арифметические операции.

class Complex {

public:

int real; // вещественная часть

int imaginary; // мнимая часть

void Add(Complex x);

// прибавить комплексное число

};

Приведенный выше пример - упрощенное определение класса Complex, представляющее комплексное число. Для класса Complex определен метод - Add.

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

void

Complex::Add(Complex x)

{

this->real = this->real + x.real;

this->imaginary = this->imaginary +

x.imaginary;

}

Первые две строки говорят о том, что это метод Add класса Complex. В фигурных скобках записано определение операции или метода Add. Это определение означает следующее: для того чтобы прибавить значение объекта класса Complex к данному объекту, надо сложить вещественные части и запомнить результат в атрибуте вещественной части текущего объекта. Точно так же следует сложить мнимые части двух комплексных чисел и запомнить результат в атрибуте текущего объекта, обозначающем мнимую часть.

Запись this-> говорит о том, что атрибут принадлежит к тому объекту, который выполняет метод Add ( объекту, получившему сообщение Add ). В большинстве случаев this-> можно опустить. В записи определения метода какого-либо класса упоминание атрибута класса без всякой дополнительной информации означает, что речь идет об атрибуте текущего объекта.

Теперь приведем этот небольшой пример полностью:

// определение класса комплексных чисел

class Complex {

public:

int real; // вещественная часть

int imaginary; // мнимая часть

void Add(Complex x);

// прибавить комплексное число

};

// определение метода сложения

void

Complex::Add(Complex x)

{

real = real + x.real;

imaginary = imaginary + x.imaginary;

}

int

main()

{

Complex number;

number.real = 1;

// первый объект класса Complex

number.imaginary = 3;

Complex num2;

// второй объект класса Complex

num2.real = 2;

num2.imaginary = 1;

number.Add(num2);

// прибавить значение второго

// объекта к первому

return 1;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]