|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||||||
Приведение типов11.12.2010, 01:43. Показов 11153. Ответов 35
Метки нет (Все метки)
Добрый вечер!
Реализовываю явное и не явное приведение типов. Есть два класса, сепаративных, A и B. Реализацию явного преобразования делаю перегрузкой типов A и B. Реализацию неявного преобразования делаю перегрузкой оператора "=". Есть следующий момент: при реализации неявного преобразования this передаётся на A в случае вызова его объектом типа A, и на B, в случае вызова его объектом B. Только и в том, и другом случаях - "как гвоздём прибито" - в параметре должен стоять либо объект В, либо объект А. Приведите, пожалуйста, пример реализации. Как сделать правильно? ![]()
Не по теме: Ребята...? :) Добавлено через 5 часов 6 минут Не по теме: Есть варианты?
0
|
||||||
| 11.12.2010, 01:43 | |
|
Ответы с готовыми решениями:
35
Приведение типов
Приведение типов. |
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||
| 12.12.2010, 01:15 [ТС] | ||
|
0
|
||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||
| 12.12.2010, 01:26 | |||
|
В случае присваивания a = s_c<A>(b), оператором B::A() создается новый объект A() и побитово, компиляторо-сгенерированным присваиванием, копируется в a; по сути a = b.operator A();. В случае i = b, функция b.operator int() возвращает целочисленное значение, которое присваивается i.
0
|
|||
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||
| 12.12.2010, 01:30 [ТС] | ||
0
|
||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||
| 12.12.2010, 01:35 | ||||||
|
UB, зависит от типов.
Добавлено через 2 минуты Не думаю, что в случае
1
|
||||||
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
|
| 12.12.2010, 01:43 [ТС] | |
|
0
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||
| 12.12.2010, 01:47 | ||||||
|
Это не адрес, это значение. Байты копируются из памяти в память.
Если бы a присваивался адрес b, изменение а затрагивало бы и b. Вот присваивание адреса.
0
|
||||||
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||||||
| 12.12.2010, 16:01 [ТС] | ||||||
Ещё есть ошибки на счёт оператора =, как слишком мало параметров бин. оператора, syntax error 'newline', видимо всё связано с невидением класса.
0
|
||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||
| 12.12.2010, 20:42 | ||||||
|
В классе B еще не известен класс А. Поэтому эти ф-ции некорректны.
0
|
||||||
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
|
| 13.12.2010, 00:09 [ТС] | |
|
0
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|
| 13.12.2010, 00:17 | |
|
Ничего и не выйдет. В любом случае, к моменту определения класса А, определение класса Б еще не закончено, как ни выеживайся. Поэтому не выйдет.
Если подумать, возникает непонятки с размерами типа, поскольку тип А включает в себя переменную типа Б, который включает в себя переменную типа А, который включает в себя переменную типа Б... ... ... ...
0
|
|
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
|
| 13.12.2010, 17:15 [ТС] | |
Да, но Вы предложили этот код, так как сделать правильно тогда?Добавлено через 36 минут Compiling... StdAfx.cpp d:\microsoft visual studio\myprojects\lr4_casting\b.h(20) : error C2833: 'operator A' is not a recognized operator or type d:\microsoft visual studio\myprojects\lr4_casting\b.h(20) : error C2059: syntax error : 'newline' d:\microsoft visual studio\myprojects\lr4_casting\b.h(21) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body d:\microsoft visual studio\myprojects\lr4_casting\b.h(28) : error C2143: syntax error : missing ',' before '&' d:\microsoft visual studio\myprojects\lr4_casting\b.h(28) : error C2059: syntax error : '&' d:\microsoft visual studio\myprojects\lr4_casting\b.h(34) : error C2535: 'class B &__thiscall B::operator =(const int)' : member function already defined or declared d:\microsoft visual studio\myprojects\lr4_casting\b.h(28) : see declaration of '=' Error executing cl.exe. lr4_casting.exe - 6 error(s), 0 warning(s) Что меня и смутило в начале, почему A() - оператор.
0
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|
| 14.12.2010, 00:12 | |
|
Тип, определенный первым, ничего не знает о типе, определенном вторым. Допустим, первый тип называется A, а второй B, допустим также, что имеются две переменные A a и B b.
Поэтому. Второй тип (B) можно привести к первому (A) оператором с именем первого типа (B::operator A()) для операции a = b. <- вот это приведение типов. Первый тип ко второму привести, используя оператор, нельзя, поскольку он определен раньше второго и второй тип не может быть закончен к началу второго. Для обратного присваивания (b = a) можно определить оператор присваивания в классе B (B& operator= (const A&)), который будет заниматься присваиванием переменной типа B переменной типа A. <- вот это -- присваивание.
0
|
|
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||||||
| 15.12.2010, 21:54 [ТС] | ||||||
d:\microsoft visual studio\myprojects\lr4_casting\b.h(20) : error C2059: syntax error : 'newline' d:\microsoft visual studio\myprojects\lr4_casting\b.h(21) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body d:\microsoft visual studio\myprojects\lr4_casting\b.h(28) : error C2143: syntax error : missing ',' before '&' d:\microsoft visual studio\myprojects\lr4_casting\b.h(28) : error C2059: syntax error : '&' d:\microsoft visual studio\myprojects\lr4_casting\b.h(34) : error C2535: 'class B &__thiscall B::operator =(const int)' : member function already defined or declared d:\microsoft visual studio\myprojects\lr4_casting\b.h(28) : see declaration of '=' Error executing cl.exe. lr4_casting.exe - 6 error(s), 0 warning(s) И ещё, в main() я первое, что делаю, привожу b к a, что согласно Вашим словам, корректно, т.к. я сначала определил А. Но вот такие вот ошибки. Как их исправить?
0
|
||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||
| 15.12.2010, 22:34 | ||||||
|
Уберите эти инклуды. Не выйдет сделать оператор, приводящий класс к типу, описанному после класса.
0
|
||||||
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||||||
| 15.12.2010, 22:36 [ТС] | ||||||
|
Да, include было лишним
Но в классе В
0
|
||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|
| 15.12.2010, 22:48 | |
|
или в классе A для ф-ции getdata() добавить.
0
|
|
| 15.12.2010, 22:48 | |
|
Приведение типов Приведение типов Приведение типов
Приведение типов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|
|
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю
Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы
Кратко. . .
|
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем
**Полевые заметки о двухнедельной совместной работе**. . .
|
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|