Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Предотвращение преобразования типов от основного к пользовательскому с помощью конструктора

Перегруженные функции. Встроенные функции. Рекурсивные функции. | Область видимости и класс памяти. | Объявление и инициализация одномерного и двумерного массивов. Работа с элементами массива через указатель. | Принципы ООП. Инкапсуляция. Наследование. Полиморфизм. | Конструкторы и деструкторы. Конструкторы копирования по умолчанию. | Объекты как аргументы методов и доступ к их числам. | Размещение в памяти членов объектов одного класса и способ создания общих полей (св-в). | Константные методы, их аргументы и константные объекты. | Строки на основе массива типа char и класса string | Перегрузка бинарных операций |


Читайте также:
  1. Lt;question> Итоговое изложение основного концептуального содержания работы, а также краткая формулировка главных выводов.
  2. Quot;Я могу обратиться за помощью".
  3. SA8™ Универсальный отбеливатель для всех типов тканей, 500 гр. или 1 кг
  4. VII. Рекомендованное типовое техническое и технологическое обеспечение ЦОИ
  5. а) Использование различных типов гидротурбин в соответствии с напорами.
  6. А) Определение прямоугольных координат с помощью циркуля (линейки)
  7. Адаптация к социально-экономичиским условиям жизни у разных типов предпринимателей (в абсолютных числах и % от числа опрошенных в каждом типе).

Рассмотрим пример:

class Distance

{

private:

const float MTF;

int feet;

float inches;

public:

Distance (): feet (0), inches (0.0), MTF (3.280833F)

{ }

explicit Distance (float meters)

{ /*некоторые действич*/}

void showdist ()

{ cout << feet << "\'-" << inches << '\"'; }

};

int main ()

{

void fancyDist (Distance);

Distance dist1 (2.35F);

// Distance dist1 = 2.35F;

cout << "\ndist1 = "; dist1.showdist ();

float mtrs = 3.0F;

cout << "\nDist1 ";

// fancyDist (mtrs);

return 0;

}

///////////////////////////////////////////////////////////

void fancyDist (Distance d)

{ /*некоторые действич*/}

Аргументом ф-ии fancyDist является переменная класс Distance, и можно вызвать ф-ию fancyDist() с такой переменной без проблем.

Хитрость этой функции в том, что можно вызывать ф-ию fancyDist() с переменной типа float в качестве аргумента: fancyDist (mtrs);

Компилятор поймет, что тип аргумента неверен и будет искать операцию преобразования. Найдя конструктор Distance, который принимает в качестве аргумента переменную типа float, компилятор приспособит этот конструктор для преобразования типа float в Distance и передаст значение типа Distance в ф-ию. Это неявное преобразование, одно из тех, которые вы можете упустить из вида.

Именно для предотвращения таких случаев и используются явные конструкторы.

 


Дата добавления: 2015-08-17; просмотров: 109 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Преобразование типов от основного к пользовательскому.| Базовый и производный классы. Конструкторы производного класса. Перегрузка методов при наследовании. Алгоритм выбора перегруженного метода.

mybiblioteka.su - 2015-2024 год. (0.006 сек.)