Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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;

// Выполняется встроенная операция сложения

//двух плавающих чисел

Так как ни одно преобразование, заданное пользователем не имеет приоритета над другим, то возможно появление двусмысленности в преобразованиях.

Date: 2016-05-13; view: 364; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию