R.12.3.2 Функции преобразования
R.12.3.2 Функции преобразования
Функция-член класса X, имя которой имеет вид,
имя-функции-преобразования:
operator имя-типа-преобразования
имя-типа-преобразования:
список-спецификаций-типа opt операция-ptr opt
задает преобразование из типа X в тип, определяемый конструкцией имя-типа-преобразования. Такие функции-члены называются функциями преобразования. В конструкции список-спецификаций-типа нельзя описывать классы, перечисления и имена-typedef, а также нельзя задавать типы формальных параметров и тип возвращаемого значения.
Приведем пример:
class X {
//…
public:
operator int();
};
void f(X a)
{
int i = int(a);
i = (int)a;
i = a;
}
Здесь во всех трех операторах присваиваемое значение будет преобразовываться с помощью функции X::operator int(). Пользовательские преобразования не ограничиваются только использованием в присваивании и инициализации, например:
void g(X a, X b)
{
int i = (a) ? 1+a : 0;
int j = (a&&b) ? a+b : i;
if (a) {//…
}
}
Операции преобразования наследуются. Функции преобразования могут быть виртуальными.
К данному значению неявно применяется не более одного пользовательского преобразования (с помощью конструктора или функции преобразования), например:
class X {
//…
public:
operator int();
};
class Y {
//…
public:
operator X();
};
Y a;
int b = a; // недопустимо: преобразование
// a.operator X().operator int() не применяется
int c = X(a); // нормально: a.operator X().operator int()
Пользовательские преобразования осуществляются неявно только при условии их однозначности. Функция преобразования производного класса не закрывает функцию преобразования базового класса, если только они не преобразуют к одному и тому же типу, например:
class X {
public:
//…
operator int();
};
class Y: public X {
public:
//…
operator void*();
};
void f(Y& a)
{
if (a) {// ошибка: неоднозначность
}
}
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Преобразования из XML в XML
Преобразования из XML в XML Преобразования XML-XML иногда рассматриваются как SQL для Интернета, поскольку они позволяют оперировать запросами к базе данных в XML-документах. Ниже приведен пример. Используемый нами файл planets.xml содержит достаточно много данных о каждой
Преобразования CSS
Преобразования CSS В главе 22, ведя разговор о канве и программном рисовании на ней, мы узнали о преобразованиях системы координат. С помощью особых расширений CSS мы можем проделать аналогичные действия над любым элементом Web-страницы: сместить его, повернуть, растянуть или
Функции для преобразования символов
Функции для преобразования символов nl2brЗаменяет символы перевода строки.Синтаксис:string nl2br(string string)Заменяет в строке все символы новой строки на <br> и возвращает результат. Исходная строка не изменяется. Обратите внимание на то, что символы , которые присутствуют в
Преобразования CSS
Преобразования CSS В главе 22, ведя разговор о канве и программном рисовании на ней, мы узнали о преобразованиях системы координат. С помощью особых расширений CSS мы можем проделать аналогичные действия над любым элементом Web-страницы: сместить его, повернуть, растянуть или
R.4.5 Арифметические преобразования
R.4.5 Арифметические преобразования Для большинства операций преобразования операндов и тип результата определяются одними и и теми же правилами. Это правило можно назвать "обычными арифметическими преобразованиями".Если один из операндов есть long double, другой операнд
R.4.6 Преобразования указателей
R.4.6 Преобразования указателей Всюду, где указатели (§R.8.2.1) присваиваются, инициализируются, сравниваются или используются иным образом, могут происходить следующие преобразования:Константное выражение (§R.5.19), которое сводится к нулю, преобразуется в указатель, обычно
R.12.3 Преобразования
R.12.3 Преобразования Преобразования объектов класса можно задать с помощью конструкторов или функций преобразования.Такие преобразования, обычно называемые пользовательскими, используются неявно в совокупности со стандартными преобразованиями (§R.4). Например, функцию
Правило 46: Определяйте внутри шаблонов функции, не являющиеся членами, когда желательны преобразования типа
Правило 46: Определяйте внутри шаблонов функции, не являющиеся членами, когда желательны преобразования типа В правиле 24 объясняется, почему только к свободным функциям применяются неявные преобразования типов всех аргументов. В качестве примера была приведена функция
Модификаторы спецификации преобразования, используемые в функции printf( )
Модификаторы спецификации преобразования, используемые в функции printf( ) Мы можем несколько расширить основное определение спецификации преобразования, поместив модификаторы между знаком % и cимвoлoм, определяющим тип преобразования. В приводимой ниже таблице дан
Преобразования снаружи
Преобразования снаружи В общем случае в преобразовании участвуют три документа:? входящий документ, который подвергается преобразованию;? документ, который описывает само преобразование;? выходящий документ, который является результатом преобразования.Само по себе
Модель преобразования
Модель преобразования Во вводной главе мы говорили, что преобразования в XSLT являются наборами шаблонных правил, каждое из которых обрабатывает определенный фрагмент входящего документа с тем, чтобы сгенерировать фрагмент выходящего
8.5.6 Преобразования
8.5.6 Преобразования Конструктор, получающий один параметр, определяет преоразование из типа своего параметра в тип своего класса. Такие преобразования неявно применяются дополнительно к стандартным пробразованиям (#6.6-7). Поэтому присваивание объекту из класса X
Преобразования
Преобразования Преобразований, предусматриваемых Flash, всего два. Однако с их помощью можно задать весьма сложное движение выделенного нами фрагмента