В С++ можно заставить привычные операции выполнять те иные, чем обычно действия над определеннымитипами данных. Например, выполнить перезагрузку оператора @ для выполнения некоторых действий. Тогда достаточно определить функцию с именем operator@ и требуемым числом и типами аргументов так, чтобы эта функция выполняла необходимые действия.
Пример. Переопределим («перегрузим») операцию сложения для данных типа string (строки).
# include <stdio.h>
# include <string.h>
const MAX_STR_LEN=80; // В С++ возможно определение констант
struct String // Структурный тип Строка
{
char s[MAX_STR_LEN]; // Массив символов – "Содержимое" Строки
int str_len; // Текущая длина строки
}; // Переопределим ("перегрузим") оператор сложения для данных типа String
String operator+(String s1, String s2)
{
String TmpStr; // для временного хранения
/* Длина строки-результата сложения равна сумме длины складываемых строк.
Позаботимся также о том, чтобы не выйти за границу отведенного массива*/
if ((TmpStr.str_len=s1.str_len+s2.str_len)>=MAX_STR_LEN)
{
TmpStr.s[0]='\x0';
TmpStr.str_len=0;
return TmpStr; // Вернем нулевую строку.
} // Иначе или далее сольем строки
strcpy(TmpStr.s, s1.s); //s1.s-> TmpStr.s
strcat(TmpStr.s, s2.s); // присоединим s2.s к TmpStr.s
return TmpStr; // и возвратим результат
}