Язык С++ для системного программирования. Имена-этикетки. Класс как область действия, страница 11

 V.Im=C1.Im + C2.Im;

 return V ;

}

При перезагрузке операций следует выполнять следующие правила:

1.  Приоритеты операций и правила ассоциаций, принятые для типов float ,double ,int ,long, должны оставаться неизменными также и для перегруженных функций-операций;

2.  Функции-операции не могут изменить поведение операции по отношению к стандартным типам float ,double ,int ,long;

3.  Функция-операция должна быть или элементом класса, или воспринимать один или несколько аргументов, которые имеют тип класса;

4.  Функция-операция не может иметь аргументы по умолчанию;

За исключением operator= ( ) все функции-операции наследуются.

21.1 Статические элементы

21.1.1 Статические элементы-данные

Статические элементы-данные - это глобальные переменные, доступные только в пределах области класса. Объявляются при описании класса, а инициализируются после того, как класс описан. Признаком статического элемента является ключевое слово static.Синтаксис написания имеет вид

staticтип имя_элемент-данных.

Например,

сlass A
{
static int x ;// Объявление
: : : : : 
};
 
int  A :: x = 125; //Инициализация

Здесь приведен статический элемент данных целого типа. После завершения описания класса А этот элемент инициализирован. Инициализация обязательна! Элемент данных, определенный как static, используется всеми объектами данного класса. Существует только один экземпляр переменнойнезависимо от числа созданных объектов. На самом деле, память под статический элемент выделяется, даже если не существует ни одного объекта данного класса. Именно потому, что это только один экземпляр, обращение к нему имеет вид:

имя_класса : : имя_элемента = данных.

Тот факт, что статический элемент данных инициализируется, не означает, что существует запрет на изменение его значения в ходе работы программы.

21.1.2 Статические элементы-функции

Для работы со статическими элементами данных создаются статические элементы-функции. Их оглавления имеют вид:

staticтип_результата имя_функции (параметры).

Параметры - только статические элементы данных.

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

Статическая функция может вызывать только другие статические

функции-элементы данного класса. Не может быть виртуальной. Вызов статической функции имеет вид:

имя_класса :: имя_функции (фактические параметры);

Пример 1 Демонстрирует факт возможности вызова статической функции_элемента даже при отсутствии объектов данного класса.

#include <stdio.h>
 
class A
 
{
 
public:
 
static void stat_func()
 
{
 
puts (" Я существую сама по себе!");
 
}
 
};
 
voidmain ()
 
{
 
A :: static_func ( ); //Вызов статической функции.
 
}

Пример 2 Демонстрирует особенности обработки статических и нестатических элементов данных статическими и нестатическими функциями - членами класса.

#include <stdio.h>
 
class coord
 
 {
 
static float x;
 
float y;
 
public:
 
coord(float a):y(a)
 
 {
 
 }
 
static void f_stat()
 
 {
 
 puts("Введите х=");
 
scanf("%f",&x");
 
 printf("x=%f\n",x);
 
 }
 
 void f_non _stat()
 
 {
 
 puts("Введите х=");
 
scanf("%f",&x");
 
 printf("x=%f y=%f\n",x,y);
 
}
 
 }
 
floatcoord::x=12.5;//Инициализация х.
 
void main()
 
 {
 
 coord w(45);// w.x=12.5;w.y=45.
 
 w.f_stat();//Можно,
но через this ничего //не передается.
 
w.f_non_stat();
 
 coord::f_stat();//Еще
один способ//вызова статической функции.