Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с кавычками с++ https://www.cyberforum.ru/ cpp-beginners/ thread2489973.html
можете ли вы мне помочь со столь стервозной проблемой. Допустим у меня есть строка - string str = "hello "world" "\\\"" --- \'\\ test \"\' world "; и мне нужно узнать откуда...
Thread. Первый раз с много-поточностью C++
Привет, форумчане! есть код, код не мой, но хотелось бы, по возможности, разобраться. Нужно генерировать случайные строки из диапазоне mutex mtx; class Make_timer { public: Make_timer()...
C++ Thread. Многопоточность Привет! есть код, код не мой, но хотелось бы разобраться, по возможности. Нужно генерировать строки в диапазоне mutex mtx; class Make_timer { public: Make_timer() :t1(system_clock::now()) {... https://www.cyberforum.ru/ cpp-beginners/ thread2489910.html C++ Z(x,y)=min{max{sinx,siny},x,y} Как вычислить ф-цию Z(x,y)=min{max{sinx,siny},x,y} если -1.7<=x<=9.4 увеличение по 9.3, а 0<=y<=3 , увеличение по 0.75 . https://www.cyberforum.ru/ cpp-beginners/ thread2489898.html
Переменные родительского класса C++
Всем привет! Такая проблема Класс родитель class Layer { public: Layer(); ~Layer();
C++ Ускорение кода https://www.cyberforum.ru/ cpp-beginners/ thread2489857.html
Как ускорить код: #include <iostream> using namespace std; int main(){ int n, q, c = 0;
C++ Прекращается работа программы При запуске в Visual Studio 2019 программа не работает и появляется сообщение "Прекращена работа программы". Подскажите, пожалуйста, как исправить ошибку? #include<iostream> #include<stack>... https://www.cyberforum.ru/ cpp-beginners/ thread2489832.html Перебор элементов в массиве C++
Условие задачи: Написать отдельную функцию, которая принимает 2 параметра (char, int sum). Дано: 3 * (21 + 17)) / (3 - 1) + 43, если ошибок нет, функция должна вернуть значение 100, а если есть...
C++ Как сделать динамический массив глобальным https://www.cyberforum.ru/ cpp-beginners/ thread2489817.html
Нужно что бы создание, ввод и вывод были в разных функциях #include "pch.h" #include <iostream> using namespace std; int main(){ setlocale(LC_ALL,"Russian");
C++ Побитовые логические выражения https://www.cyberforum.ru/ cpp-beginners/ thread2489805.html
Пишу программу для побитовых логических операций. Приоритет ! = 4, ~ = 4, & = 3, ^ = 2, | = 1. Мои комментарии на русском. '=' показывает результат. Найденные проблемы: 1) x|y^z, это она...
C++ Можно ли так делать ?
Я пока что начинающий, поэтому хочу спросить, можно ли так делать ? #include<iostream> #include<cstdlib> using namespace std; int Factorial(int k) { if(k==1)
C++ Перегруженный оператор ввода Почему ошибка при попытке вывести результат сложения двух матриц? #include <iostream> using namespace std; class Matrix { private: https://www.cyberforum.ru/ cpp-beginners/ thread2489782.html
Эксперт С++
8397 / 4073 / 890
Регистрация: 15.11.2014
Сообщений: 9,157
12.08.2019, 23:17 0

Можно ли создать массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться int и т.д.? - C++ - Ответ 13767468

12.08.2019, 23:17. Показов 6044. Ответов 119
Метки (Все метки)

Ответ

Цитата Сообщение от ValeryS Посмотреть сообщение
а это что
неужели до твоих мозгов не доходит смысл фразы:
"элементами массива могут быть объекты разного типа" ?

вот тебе простой пример без union, без variant, и даже без any:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
struct base
{
    virtual const char* msg() const noexcept { return "base"; }
};
 
struct der: base
{
    virtual const char* msg() const noexcept 
    { 
        static_assert(
            sizeof(der) == sizeof(base),
            "invalid size"
        );
        
        return "der"; 
    }
};
 
struct bro: base
{
    virtual const char* msg() const noexcept  
    { 
        static_assert(
            sizeof(der) == sizeof(base),
            "invalid size"
        );
        return "bro"; 
    }
};
 
int main()
{
    base array[3];
    
    new(array + 0) base;
    new(array + 1) der;
    new(array + 2) bro;
    
    // --- теперь массив и без всяких union хранит объекты 
    // --- принципиально различных типов
 
    for(const auto& el: array)
        std::cout << el.msg() << '\n';
}
я не понимаю, как можно,
невзирая на наличие рабочих кодов,
так и не вразуметь: формальный тип массива - лишь формальность.
он может хранить объекты любых типов,
какие в него засунет программист.
главное, что бы места в массиве хватило.

можно вообще закладывать объекты принципиально несовместимых типов,
смысл не измениться на на йоту.

так в примере выше использовался массив base array[3];
с тем же успехом можно использовать массив обычных чаров.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
 
struct base
{
    virtual const char* msg() const noexcept { return "base"; }
};
 
struct der: base
{
    virtual const char* msg() const noexcept 
    { 
        static_assert(
            sizeof(der) == sizeof(base),
            "invalid size"
        );
        
        return "der"; 
    }
};
 
struct bro: base
{
    virtual const char* msg() const noexcept  
    { 
        static_assert(
            sizeof(der) == sizeof(base),
            "invalid size"
        );
        return "bro"; 
    }
};
 
int main()
{
    char array[ sizeof(base) * 3];
    
    new(array) base;
    new(array + sizeof(base)) der;
    new(array + sizeof(base) * 2) bro;
    
    base* base_obj = (base*)array;
    base* der_obj  = ((base*)array) + 1;
    base* bro_obj  = ((base*)array) + 2;
    
    std::cout << base_obj->msg() << '\n';
    std::cout << der_obj->msg() << '\n';
    std::cout << bro_obj->msg() << '\n';
}

Цитата Сообщение от ValeryS Посмотреть сообщение
перепечатай
особенно где написан вот этот кусок
A union is a special class type that can hold only one of its non-static data members at a time.
для тех, кто в танке, тоже самое по-русски.
Объединения — это тип класса, в котором все данные разделяют одну и туже область памяти.
для тех, кто совсем тупой:
в один момент времени только один из членов union может быть активным.
это значит, что в один момент времени union хранит либо bool, либо int,
либо ещё что ты хочешь использовать.

и именно для этой цели: хранить объекты разных типов,
и завезли union в язык.

я так понял, причина твоих заблуждений в том,
что ты тупо не знаешь элементарных вещей.

мой тебе совет: прежде чем нести всякую чушь,
лучше выучи сначала язык.

Вернуться к обсуждению:
Можно ли создать массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться int и т.д.? C++
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2019, 23:17
Готовые ответы и решения:

Создать базу из трех сотрудников, где будут храниться их имена
суть задачи: нужно создать базу из трех сотрудников, где будут храниться их имена, з.п, должности,...

Можно ли в com-сервере создать массив в котором будут храниться данные какое-то время
Можно ли в com-сервере сделать так, чтобы одна из процедур выполняла вычисления и заносила их в...

Создать массив, содержащий массивы, которые, в свою очередь, содержат массивы, в которых уже будут храниться различные типы данных
Мне нужно создать массив, содержащий массивы, которые, в свою очередь, содержат массивы, в которых...

Создать централизованную базу данных, где будут храниться все клиенты, всех офисов
Доброго времени суток ! Есть проблема одна. Несколько офисов, работают ведут учет клиентов в...

119
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2019, 23:17

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Получить массив, где будут храниться индексы строк матрицы, в которых есть равные элементы
2. Дан прямоугольный массив A. Получить линейный массив B, в котором будут храниться номера тех...

Создать класс, в котором информация будет храниться в хеше.
А подскажите еще, мне нужно создать класс , в котором в хеше будет храниться информация, ее...

Комментарии. Создать модуль, в котором будет храниться процедура создания картинки
Привет всем! помогите с комментариями к программе пожалуйста... Создайте модуль, в котором будет...

дан массив целых чисел в котором храниться 20 тысяч элементов
дан массив целых чисел в котором храниться 20 тысяч элементов.Найти в массиве первый минимальный...

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