Определение функции-члена класса
Хотя функции в приведенных выше примерах и объявлены в классах, но они еще не определены. Для определения функции-члена нужно связать имя класса, частью которого является функция-член, с именем функции. Это достигается путем написания имени функции вслед за именем класса с двумя двоеточиями. Операцию, записываемую в виде двух двоеточий, называют операцией расширения области видимости. Для задания функции-члена используется следующая общая форма:
<тип_результата_функции> <имя_класса> :: <имя_функции> (<список_параметров>)
{
<тело_функции>
}
Примеры определения функций-членов GetX( ) и SetX( ) класса AnyClass:
int AnyClass :: GetX()
{
return x;
}
void AnyClass :: SetX(int X)
{
x=X;
}
Если тело функции-члена класса невелико по объёму, как в приведённом выше примере, то описание функции удобно привести в объявлении класса в соответствии со следующим синтаксисом:
<тип_результата> <имя_функции> (<список_параметров>) {<тело_функции>}
В этом случае чтение и редактирование класса упростится, и он будет иметь следующий вид:
Пример 4.
class AnyClass
{
Int X; // закрытое данное-член класса
public: // открытые члены класса
int GetX()
{return x;} // функция возвращает значение данного-члена класса x
void SetX(int X)
{x=X;} // функция изменяет значение данного-члена класса x
}
Пример 5. Функции-члены класса complex можно описать таким образом:
double real()
{
return(re);
}
double imag()
{
return(im);
}
void set(double x, double y)
{
re = x;
im = y;
}
void print()
{
cout<<"re = "<<re<<endl;
cout<<"im = "<<im;
}
Создание объекта класса
Объявление класса не приводит к созданию объектов типа класс. Чтобы создать объект соответствующего класса, нужно просто использовать имя класса как спецификатор типа данных.
Для описания объекта класса (экземпляра класса) используется конструкция
имя_класса имя_объекта;
В определяемые объекты входят данные, соответствующие членам − данным класса. Функции-члены класса позволяют обрабатывать данные конкретных объектов класса. Обращаться к данным объекта и вызывать функции для объекта можно двумя способами. Первый с помощью «квалифицированных» имен:
имя_объекта.имя_данного
имя_объекта.имя_функции
Например: для создания объектов класса AnyClass
Пример 6.
void main()
{
AnyClass obA, оbB; // создание двух объектов
obA.SetX(1); // изменение значение данного-члена x в объекте obA
obB.SetX(3); // изменение значение данного-члена x в объекте obB
}
После того, как объект класса создан, можно обращаться к открытым членам класса, используя операцию "точка", так же как к полям структуры.
Эти операторы устанавливают значения переменной x в объектах obA и оbB . Каждый объект содержит собственную копию всех данных, объявленных в классе. Это значит, что значение переменной x в obA отлично от значения этой переменной в оbB.
Пример 7.
void main()
{
complex x1, x2;
x1.set(1.8, 3.2);
x2.set(5.1, 1.7);
x1.print();
x2.print();
}