Функции-члены
Функции-члены класса — это функции, принадлежащие вашему классу Они являются локальными по отношению к классу, в котором определены, и не существуют вне класса. Функции-члены могут быть вызваны только изнутри класса или через экземпляр класса. Они имеют доступ ко всем открытым, защищенным и закрытым членам-данным своего класса. Функции-члены могут быть объявлены в разделах private, protected или public. Вы должны подумать о том, в какой раздел поместить свои функции.
Открытые функции-члены представляют собой интерфейс между пользователем и классом. Именно через открытые функции пользователи класса получают доступ к тем возможностям, которые предоставляет класс. Например, у вас есть класс для записи и воспроизведения звука. В этом случае открытыми могут быть функции типа Open(), Play(), Record(), Save(), Rewind() и т.д.
Закрытые функции-члены предназначены только для использования самим классом. Их вызов пользователем класса не предполагается; они скрыты от внешнего мира. Часто при создании класса необходимо выполнить ряд инициализирующих действий. (Вы уже познакомились с конструктором, который автоматически вызывается при создании класса.) Для некоторых классов начальные процедуры требуют выполнения довольно большого объема кода. Чтобы не загромождать конструктор, лучше всего написать функцию Init(), которая будет вызываться из конструктора и выполнять все необходимые действия. Эта функция никогда не должна напрямую вызываться пользователем класса. При обращении к ней в неподходящий момент может произойти много неприятностей, поэтому для защиты класса (и пользователя) она должна быть закрытой.
Защищенные функции-члены — это функции, доступные только для тех классов, которые являются производными данного класса. Доступ извне к этим функциям невозможен.
Функция типа inline, первая форма:
ClassName {
public:
ReturnType FunctionName();
};
inline ReturnType ClassName::FunctionName() {
statements;
}
Функция FunctionName объявлена в теле класса ClassName. Определение функции (т.е. сама функция) находится вне объявления класса. При этом используется ключевое слово inline. Имени функции должно предшествовать имя класса с оператором разрешения видимости.
Функция типа inline, вторая форма:
ClassName {
public:
ReturnType FunctionName()
{
statements;
}
};
Функция FunctionName объявлена и определена внутри объявления класса. В этом случае она автоматически считается подставляемой. Ключевое слово inline не требуется.
Правила работы с функциями-членами класса
Делайте открытыми только те функции, которые необходимы пользователю для работы с классом.
Делайте закрытыми все функции, о которых пользователю не нужно знать.
Делайте защищенными те функции, которые могут потребоваться производным классам, но о которых пользователю также не нужно знать.
Используйте статические функции-члены только в особых случаях.
Объявляйте подставляемыми все функции, которые должны выполняться быстро. Не забывайте, что подставляемые функции должны быть короткими.
Оформляйте код, который повторяется более двух раз, в виде отдельной функции.
Пример 1.
#include <conio.h>
#include <iostream.h>
//Простой класс Date
class Date{
public:
Date(int=1, int=1, int=1990); // конструктор по
//умолчанию
void print();
private:
int month;
int day;
int year;
};
// Простой конструктор Date без проверки диапозона
Date::Date(int m, int d, int y)
{ month = m;
day = d;
year = y;
}
// Печать даты в формате mm-dd-yyyy
void Date::print()
{ cout<<month<<”-”<<day<<”-”<<year;}
int main() {
Date date1(12, 2, 2002), date2; //date2 по умолчанию 1.1.1990
cout<<”date1 = “;
date1.print();
cout<<endl<<”date2 = “;
date2.print();
date2 = date1;
cout<<endl<<endl<<”date2 = “;
date2.print();
getch();
return 0;}
