|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||||||
Приведение типов11.12.2010, 01:43. Показов 11447. Ответов 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
|
||
|
4904 / 2697 / 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
|
||
|
4904 / 2697 / 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
|
|
|
4904 / 2697 / 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
|
||||||
|
4904 / 2697 / 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
|
|
|
4904 / 2697 / 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
|
|
|
4904 / 2697 / 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
|
||||||
|
4904 / 2697 / 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
|
||||||
|
4904 / 2697 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|
| 15.12.2010, 22:48 | |
|
или в классе A для ф-ции getdata() добавить.
0
|
|
| 15.12.2010, 22:48 | |
|
Приведение типов Приведение типов Приведение типов
Приведение типов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|