Конструктор
complex (double r) { real = r; imag =0; }
обеспечивает преобразование из double в complex. Функция-член
operator double()
{return (sqrt(real * real+imag * imag));}
обеспечивает преобразование из complex в double.
inline int greater(int i, int j){return (i>j?i:j);}
inline double greater(double x, double y)
{return (x>y?x:y);}
inline complex greater(complex w, complex z)
{return (w>z?w:z);}
Перегружены три отдельных функции. Из них наиболее интересная имеет тип переменных из списка параметров и возвращаемый тип complex. Функция-член преобразования operator double требуется для оценки условия w > 2. Complex переменные w и z преобразуются в double. Далее в этой главе будет обсуждена перегрузка операторов — конструкция, которая позволяет обеспечивать новые значения для существующих операторов C++. Для возвращаемого типа нет необходимости в преобразовании.
w.assign(x,y) ;
z.assign(i, j);
Первый вызов функции-члена assign требует преобразования аргумента float x в double. Double аргумент у в преобразовании не нуждается. Оба параметра второго вызова имеют тип int, требующий преобразования. Целые аргументы совместимы с double по назначению.
cout<<”compare “<
< Первый оператор выбирает первое определение greater по правилу соответствия. Второй оператор выбирает второе определение greater, так как использовано стандартное расширяющее преобразование из float в double. Значение переменной х расширяется до double. greater(y, z); //ERROR zmax = greaterfw, z);
cout<<” greater is “<
то он будет иметь два доступных преобразования, достигших соответствия. Преобразование параметра у из double в complex, определяемое пользователем, соответствует третьему определению. Преобразование параметра z из complex в double, также определяемое пользователем, соответствует второму определению. Но второе определение функции имеет лучшее соответствие для первого параметра, между тем как третья функция имеет лучшее соответствие для второго параметра. Это нарушает требование о том, что “Максимальное соответствие должно быть уникально. Оно должно быть лучше всего для, по крайней мере, одного параметра и одинаково хорошо для всех остальных параметров.”
Определению три точно соответствует:
Похожие записи
No user прокомментировали сообщение
Оставить комментарий