Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
#1

Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? - C++

12.08.2014, 13:52. Просмотров 396. Ответов 8
Метки нет (Все метки)

Во всех примерах в union используют простые типы (int, float), а если в union будет пользовательский тип, ну например так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    union value {
        bool                    Bool;
        int                     Int;
        double              Double;
        string              String;
        map< string, value * >          Object;
        vector< value * >       Array;
 
        value operator=(const value&){}
        value(const value&){}
        value(){}
        ~value(){}
    } *json;
то при создании экземпляра
C++
1
value *obj = new value();
нужно ли инстализировать как-то String, Object или Array? ну например
C++
1
obj->Object = map< string, value * >();
И ещё один вопрос, на кой чёрт в union нужно методы???? Я не мог создать экземпляр пока не добавил пару конструкторов, деструктор и оператор копирования. Что без них вообще никак?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2014, 13:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? (C++):

Написать программу учёта абитуриентов, описав типы Array и String - C++
Доброго времени суток. Программа должна выводить данные абитуриентов (ФИО ID, самый распространённый балл, средний балл) в зависимости от...

Реализовать пользовательские типы: класс Person и класс String - C++
1)Разработать класс Person, который содержит соответствующие члены для хранения: имени, возраста, пола и телефонного номера. ...

Надо добавить в код пользовательские типы, но что бы они небыли лишними, я незнаю как это сделать - C (СИ)
#include &lt;stdio.h&gt; main() { unsigned long ip_host, mask, ip_d; system(&quot;cls&quot;); ip_host = 0x3C9F4D57; mask =...

Object = Object или как сравнить два объекта? - Visual Basic
Люди, Край надо сравнить два объекта: Типа Set Obj1 = Form1 Set Obj2 = Form2 If Obj1 = Obj2 then ... Но VB говорит, что...

Incompatible types: 'array of string' and 'Dynamic array' - Delphi
Добрый день! В процессе написания программы столкнулся с ошибкой: Unit1.pas(77): E2010 Incompatible types: 'array of string' and...

Получение имени объекта. Функция public String getName(Object object) {...} - Java
К примеру есть объекты: Object myObject111 = new Object(); File parentDirectory = new File(); Хочу такую функцию: public String...

8
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.08.2014, 14:15 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от OrmaJever Посмотреть сообщение
Во всех примерах в union используют простые типы (int, float), а если в union будет пользовательский тип, ну например так
потому что пользовательский тип можно хранить в union только с С++11

Добавлено через 1 минуту
Цитата Сообщение от OrmaJever Посмотреть сообщение
нужно ли инстализировать как-то String, Object или Array? ну например
когда хотим сохранить какое-то значение то нужно, через placement new
1
Trwsdf
Заблокирован
12.08.2014, 15:53 #3
когда же вы научитесь пользоваться поиском
https://ru.wikipedia.org/wiki/C%2B%2...9_.D1.81_union
1
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
12.08.2014, 18:48  [ТС] #4
это всё интересно, но во-первых правильно ли я понял что в моём случае для структуры выше конструктор должен быть таким
C++
1
2
3
4
5
6
value::value()
{
    new( &String ) string();
    new( &Array )  vector< value * >();
    new( &Object ) map< string, value * >();
}
а во вторых, а что будет с памятью? Использовать я буду одно значение, а обьекты созданы уже для 3.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.08.2014, 21:38 #5
Цитата Сообщение от OrmaJever Посмотреть сообщение
Использовать я буду одно значение, а обьекты созданы уже для 3.
ну так в том-то и дело что не надо создавать сразу 3, вообще ничего не надо конструировать пока не понадобится что-то сохранить
0
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
12.08.2014, 22:18  [ТС] #6
Цитата Сообщение от Jupiter Посмотреть сообщение
ну так в том-то и дело что не надо создавать сразу 3, вообще ничего не надо конструировать пока не понадобится что-то сохранить
ну вот я и спрашиваю как правильно это осуществить, перед самой запись конструировать нужный обьект? Если да то как правильно? Просто сейчас при любом из опробованных мной вариантов я получаю Segmentation fault при записи в строку, например

C++
1
2
value *str = new value();
str->String += '.';
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.08.2014, 22:33 #7
Цитата Сообщение от OrmaJever Посмотреть сообщение
ну вот я и спрашиваю как правильно это осуществить, перед самой запись конструировать нужный обьект?
да, это уже 3-й раз, сколько ещё надо об этом написать?
C++
1
2
value *str = new value();
new(&str->String)string(".");
1
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
12.08.2014, 22:45  [ТС] #8
Цитата Сообщение от Jupiter Посмотреть сообщение
да, это уже 3-й раз, сколько ещё надо об этом написать?
видимо я с первых двух не понял смысла новой конструкции new. Теперь дошло, спасибо
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
13.08.2014, 00:03 #9
Цитата Сообщение от OrmaJever Посмотреть сообщение
новой конструкции new.
Конструкция как раз старая
0
13.08.2014, 00:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2014, 00:03
Привет! Вот еще темы с ответами:

Вывести переменную типа string в консоль: Object reference not set to an instance of an object - C#
Вот такой сабж. Пытаюсь вывести переменную типа стринг в консоль Сначала, как обычно for (int ii = 0; ii &lt; removbl.Length;...

Пользовательские типы данных - Haskell
Реализовать программу, которая принимает список овощей с ценой без НДС, количеством единиц, а также типом товара с точки зрения вычисления...

Пользовательские типы данных - C++
Объясните пожалуйста как работают перечисления,для чего нужны и как их использовать. Читал лекции и в интернете статьи,всё равно не понял

Вектор и пользовательские типы - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using namespace std; #define FIELD_LENGHT 40 struct...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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