Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Перегрузка операций и преобразование типовЧасто приходится определять функции, в которых операндами являются данные встроенных и пользовательских типов. В этом случае нужно, чтобы эти типы были приведены один к другому. Эта задача решается определением набора преобразований стандартных и пользовательских типов. Пример. В пользовательском типе Complex (для работы с комплексными числами) должна обеспечиваться арифметика и в тех случаях, когда один из операндов - это величина встроенного типа. Существует два выхода: - определить соответствующий набор операций. В этом случае класс Complex станет громоздким; - определить набор преобразований типов, как стандартных, так и пользовательских. По соглашению, принятому в языке C++. конструктор с одним аргументом можно не вызывать непосредственно. И именно этот конструктор задает преобразование данных стандартного типа в пользовательский тип (double -> Complex). Пример. //Конструктор Complex(double r) { real=r; image=0; } задает преобразование плавающего числа в комплексное. Сomplex а(1.5, 2.25); double d=5.125; а=а+d; // d преобразуется к типу Complex Кроме того, язык определяет набор стандартных преобразований, позволяющих привести друг к другу любые числовые данные, поэтому, наличие конструктора с одним аргументом (Complex (double)) достаточно для выполнения любых действий с пользовательским типом. Пример. Complex а(5.25, 1.125); int i=5; а=а+i; Данный оператор выполняется следующим образом: - переменная i преобразуется в double с помощью стандартных преобразований; - выполняется пользовательское преобразование (конструктор) double в Complex; - выполняется операция сложения Complex + Complex. Пользователь также может определить набор преобразований из пользовательского типа в любой встроенный тип. Для этого используется функция-оператор (Complex -> double). Пример. Преобразование из типа Complex в тип double: Complex:: operator double() { return real; } Complex a(5.0, 1.0); double d=2.5; d=a+d; // Выполняется встроенная операция сложения //двух плавающих чисел Так как ни одно преобразование, заданное пользователем не имеет приоритета над другим, то возможно появление двусмысленности в преобразованиях.
|