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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Int myfunc(double d);





.

.

.

cout << myfunc('c'); // Ошибки нет, выполняется преобразование типов.

Как отмечено в комментарии, ошибки здесь нет, поскольку C++ автоматически преобразует

символ 'c' в его double-эквивалент. Вообще говоря, в C++ запрещено довольно мало видов

Преобразований типов. Несмотря на то что автоматическое преобразование типов — это очень

Удобно, оно, тем не менее, является главной причиной неоднозначности. Рассмотрим

Следующую программу.

// Неоднозначность вследствие перегрузки функций.

#include <iostream>

Using namespace std;

Float myfunc(float i);

Double myfunc(double i);

Int main()

{

// Неоднозначности нет, вызывается функция myfunc(double).

cout << myfunc (10.1) << " ";

// Неоднозначность.

cout << myfunc(10);

Return 0;

}

Float myfunc(float i)

{

Return i;

}

Double myfunc(double i)

{

Return -i;

}

Здесь благодаря перегрузке функция myfunc() может принимать аргументы либо типа float,

Либо типа double. При выполнении строки кода

cout << myfunc (10.1) << " ";

не возникает никакой неоднозначности: компилятор "уверенно" обеспечивает вызов

Функции myfunc(double), поскольку, если не задано явным образом иное, все литералы с

плавающей точкой в C++ автоматически получают тип double. Но при вызове функции myfunc() с

Аргументом, равным целому числу 10, в программу вносится неоднозначность, поскольку

компилятору неизвестно, в какой тип ему следует преобразовать этот аргумент: float или double.

Оба преобразования допустимы. В такой неоднозначной ситуации будет выдано сообщение об

Ошибке, и программа не скомпилируется.

На примере предыдущей программы хотелось бы подчеркнуть, что неоднозначность в ней

Вызвана не перегрузкой функции myfunc(), объявленной дважды для приема double- и float-

Аргумента, а использованием при конкретном вызове функции myfunc() аргумента







Date: 2016-07-25; view: 307; Нарушение авторских прав



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