Определить функции-члены класса можно внутри описания класса или за его пределами. В первом случае функция считается встраиваемой (если разрешена соответствующая опция в установках компилятора). Встраиваемая функция характерна тем, что компилятор С++ обрабатывая вызовы этой функции в программе , заменяет их на непосредственно объектный код, соответствующей определению этой функции. Вследствие этого нужно помнить, что встраиваемые функции, как правило, имеют короткие определения.
Например:
class CDate
{
int mounth, day, year;
public: GetDate() {return Day};
SetDate(int,int,int);
};
Здесь функция GetDate автоматически определяется как встраиваемая, в то время как SetDate, и другие функции, описанные вне класса CDate будут организованы по обычным правилам языка С++ . Для определения функции-члена класса за пределами описания класса, необходимо определить ее где-нибудь в программе после определения класса, членом которого она является. В то же время, функции-члены различных классов могут иметь одинаковые названия, например:
class CStr
{ // класс строк
char *PointString; //
int Length; // данные
int Status; //
public: void SetString(char *) // функции-методы
void Clear( ); // класса
// другие методы класса
…
};
class CMatrix
{ // класс матриц
char *PointMatr;
int Direct ; //данные
int TypeMatr; //
public: void SetMatr(char *); //функции-методы
void Clear( ); // класса
// другие методы класса
…
};
В приведенном примере классы CStr и CMatrix содержат функции-члены класса Clear() одноименные в разных классах. Ясно, что в этом случае возникает проблема определения имени класса, к которому относится описываемая функция при программировании тела функции.
Для решения этой проблемы в С++ введена операция области видимости :: . Эта операция позволяет указать компилятору, к какому из классов принадлежит определяемая функция. Пример, приведенный ниже, показывает как определяются функции для ранее описанных классов CStr и CMatrix.
void CStr::Clear() //Определение функции Clear() для класса CStr
{
ZeroMemory(PointString,Length);
}
void CMatrix::Clear() //Определение функции Clear() для класса CMatrix
{
ZeroMemory(PointMatr,Direct);
}
Операция определения области видимости для методов класса используется для всех функций-членов класса, а не только для тех методов, имена которых совпадают в описаниях различных классов.
В определениях всех методов класса элементы данных класса, которому принадлежит определяемый метод, доступны без указания элементов данных в списке параметров метода. Эта особенность синтаксиса языка C++ во многом упрощает программирование классов и делает программы более обозримыми.
|