Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dovskr
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
#1

преобразование типов в с++ - C++

13.03.2013, 02:57. Просмотров 477. Ответов 3
Метки нет (Все метки)

Собственно вопрос в следующем. Распишите пожалуйста по шагам что происходит при выполнении данного кода

C++
1
2
3
4
5
6
{
//...
    myclass x(10);
    x=12345;
//...
}
С первой строчкой всё ясно - вызывается конструктор класса myclass , который создаёт объект o.
А вот что происходит во второй строке? Везде в интернете пишут что происходит преобразование типа int в тип myclass
Но не ясно как это происходит. Пока у меня лишь одно предположение - компилятор видит строку x=12345 и
1) Создаёт объект класса myclass, вызывая конструктор с параметром 12345;
2) После этого производит побитовое копирование этого временного созданного объекта в объект x.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 02:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос преобразование типов в с++ (C++):

преобразование типов - C++
помогите у меня программа выдает ошибки преобразования типов подскажите как должно быть чтоб все работало программа делает перестановки...

преобразование типов - C++
Уважаемые специалисты, у меня имеется одна проблема. Есть два числа. double и float. Надо из double вычесть float. Все бы хорошо, но...

Преобразование типов - C++
Здравствуйте. Такая задача: Дано вещественное число r и целые неотрицательные m и n. Записать число r в строку в формате :m:n по...

преобразование типов - C++
memcpy((void*)stroka,(void*)stroka,ykaz_bukva-ykaz_temp+1); что нужно поставить вместо void* чтоб не было предупреждений

Преобразование типов - C++
Вопрос по преобразованию строки в число , и наоборот . Например на форме расположен MaskedTextBox , Button и Label . Как при нажатии на...

Преобразование типов - C++
С учебника переписал код на применение структур, но возникла проблема с преобразованием типов. Вот код проги: #include "stdafx.h" ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.03.2013, 03:02 #2
Цитата Сообщение от dovskr Посмотреть сообщение
2) После этого производит побитовое копирование этого временного созданного объекта в объект x.
Ну, не побитовое копирование, а, скорее всего, используется оператор присваивания (есть по умолчанию). Значение полей временного объекта присваиваются полям объекта x.
То же самое, что:

C++
1
2
3
myclass x(10);
myclass b(12345);
x = b;
Только объект b - временный и безымянный.
gray_fox
What a waste!
1511 / 1214 / 69
Регистрация: 21.04.2012
Сообщений: 2,550
Завершенные тесты: 3
13.03.2013, 03:03 #3
Либо у myclass есть operator = , который принимает целое, либо неявный конструктор.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 03:06 #4
Он видит строку x = 12345. Видит знак равно; понимает, что это присваивание; смотрит на тип того, что присваивается; идёт искать по определённым правилам метод myclass& myclass::operator=(R); где R — это тип, сравнимый с типом результата вычисления правой части выражения (тут это int), или тип, который можно привести к сравнимому. Если цепочка преобразований типов есть, то они выполняются (возможно, с созданием временных объектов, а может и нет), после чего вызывается найденный ранее подходящий operator=(); если нет, то получаем ошибку компиляции.

Если не определять дополнительных методов operator=(), то у вас будет лишь стандартный myclass& myclass::operator=(const myclass &). Так что действительно компилятор пойдёт искать способ привести int к этой ссылке. Если не найдёт (а он не найдёт, так как вы его не определяли), то пойдёт искать цепочку преобразований. Такой цепочкой окажется приведение int к myclass (с помощью конструктора с одним параметром, не объявленного как explicit), а потом приведение myclass к const myclass& (с помощью взятия адреса).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 03:06
Привет! Вот еще темы с ответами:

Преобразование типов. - C++
Всем привет. Суть вопроса - ответ программы должен содержать только два знака после запятой. #include <iostream> using namespace...

Преобразование типов - C++
Здравствуйте! Подскажите как преобразовать тип данных: World в double вот код DLL которую я пишу: #include "stdafx.h" ...

Преобразование типов - C++
Вообщем допустим есть два класа, класс T и класс A, комплексные числа в разной форме записи(тригонометрической и алгебраической). Для класа...

Преобразование типов - C++
Увидел код в сети, решил откомпилировать. Думаю какой код не важно. вылезла куча ошибок. на это LPSTR ActW = new TCHAR; ругается с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.03.2013, 03:06
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru