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

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

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

вариативная часть струкуры - C++

07.03.2013, 23:23. Просмотров 1040. Ответов 18
Метки нет (Все метки)

Помогите, пожалуйста, как разработать структуру с вариативной частью для представления информации о классе (различать девушек и мальчиков) потом сделать так, чтобы можна было вывести список отдельно девушек и отдельно мальчиков, и чтобы можно было добавить новую девочку или мальчика.

Я знаю, что это надо делать с помощью Union, но как реализовать в коде, я не знаю(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2013, 23:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос вариативная часть струкуры (C++):

GCC как часть библиотек линковать статически, а часть динамически? - C++
Просто пока лень Qt пересобирать, чтобы возыметь статик-либы. Нужно Qt линковать динамически, а boost, gmp, ... статически. Возможно ли...

Есть ли возможность в char-массив часть данных ввести в буквах, а часть в цифрах? - C++
подскажите пожалуйста, есть ли возможность в char массив часть данных ввести в буквах, а часть в цифрах (или в любой другой массив вбить...

Разделить дробное число на 2 части: целая часть числа и его дробная часть - C++
Пользователь вводит с клавиатуры сумму в валюте (дробное число). Вывести по отдельности количество Рублей и количество копеек (например,...

Ошибка в задаче: Найти мин. k, которое будет удовлетворять условию: fabs(правая часть - левая часть) < 10^(-15) - C++
Задача: k изменяется от 0 до бесконечности ((4k+1)! / ^2) * x^2k = =1/2* X принадлежит интервалу (-1/4 ; 1/4) Найти мин....

Скопировать часть строки и часть удалить - C++
1. Удалить из строки ее часть с заданной позиции и заданной длины. 2. Скопировать часть строки с определенной позиции и определенной...

Вариативная длина числа - C#
Здравствуйте Есть такое понятие Variable-length quantity Вот еще информация на гугле Собственно вопрос, как из последовательности...

18
egor2116
341 / 372 / 42
Регистрация: 20.01.2013
Сообщений: 1,130
08.03.2013, 00:58 #2
Наверное как то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
using namespace std;
 
struct Human{
int age;
int growth;
union{
    char man;
      char woman;
} sex;
};
 
int main() {
 
    Human h1;
    h1.age=20;
    h1.growth=180;
    h1.sex.man='m';
    
    h1.sex.woman='w';
   
    cout<<  h1.sex.woman<<endl;
    cout<<  h1.sex.man<<endl;
    return 0;
}
Вывод
w
w
Т.к. последнее присвоение было
C++
1
h1.sex.woman='w';
Значит данный экземпляр Human женщина. П.С есть еще один способ определения мужчины и женщины но про это смотрите в ночных передачах

Добавлено через 1 минуту
Union отличается от структуры тем, что значение может быть присвоено только одному элементу в каждый момент времени.
0
Romantikkk
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 144
08.03.2013, 01:04  [ТС] #3
спасибо) а можете ещё подсказать, как, например, задавать переменные, которые принадлежать только одному или другому объеденению? (например, для мужчин - зарплата, а для женщин - пособие)... и как сделать, чтобы можно было добавлять нового мужчину или девушку с некиими параметрами?
0
egor2116
341 / 372 / 42
Регистрация: 20.01.2013
Сообщений: 1,130
08.03.2013, 01:13 #4
Добавь еще одно объединение например

C++
1
2
3
4
5
6
7
8
struct Human{
...
union{
   int salary;
   int allowance;
} cash;
...
};
а потом сравнивай

C++
1
2
3
4
if(h1.sex.man='m')
    h1.cash.salary=5000;
else 
    h1.cash.allowance=2000;
Добавлено через 4 минуты
и как сделать, чтобы можно было добавлять нового мужчину или девушку с некиими параметрами?
Создать обьект структуры.

C++
1
Human girl,boy,man,woman,elvisPrasli;
Каждому и присваивай параметры которые укажеш в структуре, возраст вес рост и т.д.
1
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
08.03.2013, 02:19 #5
Цитата Сообщение от egor2116 Посмотреть сообщение
Union отличается от структуры тем, что значение может быть присвоено только одному элементу в каждый момент времени.
бред
Цитата Сообщение от egor2116 Посмотреть сообщение
union{
* * char man;
* * * char woman;
}
вот какой смысл такого юниона??? man всегда будет равен woman!!!

Не по теме:

(по-английски это male и female если что)


Ты хоть раз юнионы до этого использовал?
0
egor2116
341 / 372 / 42
Регистрация: 20.01.2013
Сообщений: 1,130
08.03.2013, 02:35 #6
Выдержка из Wiki
Объединение (англ. union) в программировании — структура данных, члены которой расположены по одному и тому же адресу. Поэтому размер объединения равен размеру его наибольшего члена. В любой момент времени объединение хранит значение только одного из членов.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
08.03.2013, 02:37 #7
вот я и спрашиваю, использовал ли ты в своих программах объединения?
какой смысл такого юниона. У него поля всегда равны!
0
egor2116
341 / 372 / 42
Регистрация: 20.01.2013
Сообщений: 1,130
08.03.2013, 02:39 #8
Покажи как правильно для данной задачи
0
OhMyGodSoLong
08.03.2013, 02:41
  #9

Не по теме:

C
1
2
3
4
struct person {
    enum { FEMALE, MALE } sex;
    const char *name;
};

1
Croessmah
08.03.2013, 09:16
  #10

Не по теме:

Цитата Сообщение от egor2116 Посмотреть сообщение
Покажи как правильно для данной задачи
Могли бы просто char sex; сделать Объединения немного для других целей

0
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2013, 09:27 #11
с юнионами обычно так делают:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef enum _SEX { MALE, FEMALE } SEX;
 
typedef struct _Human {
   SEX sex;
   union {
       struct Male {
           int a;
       } male;
       struct Female {
           int b;
       } female;
   };
} Human;
 
int main () {
   Human h;
   if (h.sex == MALE) {
       h.male.a = 10;
   }
   return 0;
}
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
08.03.2013, 12:37 #12
Цитата Сообщение от alex_x_x Посмотреть сообщение
с юнионами обычно так делают:
ещё раз бред. Юнионы они для других целей.
Выделение битовых полей в байте
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
union device_info{
    struct {
        unsigned enabled:1;//1й бит включён ли(0..1)
        unsigned mode:2;//два бита - режим работы (4 режима)(0..3)
        unsigned clock_rate:2;  //частота работы - один из четырёх вариантов(0..3)
        unsigned channel_selected:2;//выбран канал номер (0..3)
        unsigned locked: 1; //заблокирован или нет (0..1)
    }fields;
    unsigned char data;
};
//void transmit_byte_to_device(unsigned char data){/**/}
int main ()
{
    union device_info BombInfo;
    BombInfo.fields.enabled=1;// BombInfo.byte = 0000 0001
    BombInfo.fields.mode=0;//
    BombInfo.fields.clock_rate=10;//BombInfo.byte = 0001 0001
    BombInfo.fields.channel_selected=11;//32 BombInfo.byte = 0111 0001
    BombInfo.fields.locked=0;//128           BombInfo.byte = 0111 0001
        //присвоение значений битам числа прошло.
    cout<<int(BombInfo.data);//в поле data тут же оказался байт, соответствующий полям
    transmit_byte_to_device(BombInfo.data);
    return 0;
}
выделение байтов в более длинном числе.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
union int_to_bytes{
int value;
unsigned char bytes[4];
};
int main(){
  union int_to_bytes sample;
  sample.value=1234;//присвоение значения value
  transmit_byte_to_device(sample.bytes[0]);//в массиве bytes тут же оказались
  transmit_byte_to_device(sample.bytes[1]);// байты этого значения.
  transmit_byte_to_device(sample.bytes[2]);
  transmit_byte_to_device(sample.bytes[3]);
 
}
0
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2013, 14:40 #13
Kuzia domovenok, мсье, с чего вы взяли, что union'ы ограничиваются только битовыми операциями? Это как раз естесственная вариативность в с
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
08.03.2013, 15:13 #14
Цитата Сообщение от alex_x_x Посмотреть сообщение
Kuzia domovenok, мсье, с чего вы взяли, что union'ы ограничиваются только битовыми операциями?
Во-первых, я привёл 2 примера. Второй не на битовые операции.
Во-вторых, таки да, жонглирование байтами/битами на некотором участке памяти - основное назначение юнионов.
В-третьих, это у тебя как раз бессмысленный пример использования union,
т.к. все эти юнионы в нём можно заменить одной строчкой
C++
1
2
3
struct Human {
   SEX sex;
};
зачем тут юнион?!?!?!
0
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
09.03.2013, 16:36 #15
Kuzia domovenok, а если структура должна иметь разные поля в зависимости от типа (в данном случае пола)?
0
09.03.2013, 16:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2013, 16:36
Привет! Вот еще темы с ответами:

Отсортировать часть массива до максимального элемента по возрастанию, а оставшуюся часть по убыванию - Turbo Pascal
Дан одномерный массив, элементы которого различны. Отсортировать часть массива до начальной позиции максимального элемента по возрастанию,...

Одна часть диска RAID-1, другая часть - нет. Какие минусы? - Носители информации
Какие минусы ожидают меня, если я половину каждого из двух терабайтных дисков соединю в RAID-1, а оставшееся место солью в один раздел?...

Отбросить дробную часть числа, если дробная часть равна нулю - Java SE
Всем доброго времени суток, каким образом можно устроить проверку равна ли дробная часть числа нулю. Заранее благодарен.

Aser Aspire 3003LC перестала работать часть кнопок и часть оперативки! - Ремонт ноутбуков
Есть у меня Древний ноутбук (Операционка XP, процессор Mobile AMD Semptron Processor 3000+ 792МГц, 512 MB DDR), но привык я к нему и с...


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

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

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