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

Перегрузка оператора индексации [] - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ структкры http://www.cyberforum.ru/cpp-beginners/thread288338.html
Сформировать массив, содержащий сведения о сотрудниках института. Структурный тип содержит поля: фамилия работающего, название отдела, год рождения, стаж работы, должность, оклад. Написать...
C++ realloc здраствуйте! решил накатать такой класс #include <stdlib.h> template <typename TYPE> class List { private: TYPE* buffer; http://www.cyberforum.ru/cpp-beginners/thread288328.html
C++ Составить программу определения минимального среди 5 введенных целых чисел.
Плз помогите составить текст программы,на Си Обход. Составить программу определения минимального среди 5 введенных целых чисел.
C++ Перегрузка виртуальных функций
please HELP! перегружаю виртуальную функцию в абстрактном классе. class ONE { virtual std::string FUN(const std::string& value); virtual ~ONE(); }
C++ Массивы и указатели http://www.cyberforum.ru/cpp-beginners/thread288267.html
Здравствуйте! Задача по теме указатели.Есть 2 массива размер которого получаем от пользователя. Написать функцию которая получает 2 массива и создает третий массив, размером первый + второй. В main...
C++ Структуры Сформировать массив, содержащий сведения о количестве изделий категорий A,B,C, собранных рабочим за месяц. Структурный тип содержит поля: фамилия сборщика, наименование цеха, количество изделий по... подробнее

Показать сообщение отдельно
CEBEP
107 / 107 / 9
Регистрация: 21.03.2010
Сообщений: 444
04.05.2011, 12:31
ща будет. . .

Добавлено через 1 час 16 минут
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
 
class StrangeClass
{
 
    /*задача оказалась для меня сложна но, тем не менее, я её решил. В прочем, решение малопроизводительное.
    Суть в следующем: в с++ мнимальный передаваемый объём - байт. следовательно, мы никак не уйдём от
    передачи целого байта при взаимодействии со встроенными типами. т.е. мы получаем байт и куда-то его пишем.
    Чтобы корректно обработать получаемую информацию как нужно мы вынуждены высылать не просто ссылку на какую-то
    память понимаемую как встроенный тип а сущность работающую в соответствии с нашей формой хранения данных.
    роль такой сущности играет bufer. для обработки информации ему нужна ссылка на байт памети с которым ведётся работа
    и номер сигмента с которым ведётся работа. Уверен, вам не трудно будет приспособить систему для контекста вашей задачи.
    Греет душу то что задача, явно, учебная. если же такое нужно на практике то верный выбор - отказатся от таких 
    красивых оформлений*/
    char fuckedByte;
public:
    struct Bufer
    {
        unsigned i;
        char* byte;
        Bufer(char* Byte): byte(Byte), i (0) {   }
 
        void operator = (char e)
        {
            switch(i)
            {
            case 0:
                *byte -= *byte / ( 2 * 2 * 2 * 2 * 2 ) * 2 * 2 * 2 * 2 * 2;//очистили байты)))
                *byte += e % ( 2 * 2 * 2 ) * 2 * 2 * 2 * 2 * 2;
                break;
            case 1:
                *byte -= *byte / ( 2 * 2 ) % ( 2 * 2 * 2 ) * 2 * 2;
                *byte += e % ( 2 * 2 * 2 ) * 2 * 2;
                break;
            case 2:
                *byte -= *byte % ( 2 * 2 );
                *byte += e % ( 2 * 2 );
            }
        }
        operator char()
        {
            switch(i)
            {
            case 0:
                return *byte / 2 / 2 / 2 / 2 / 2;
            case 1:
                return *byte / 2 / 2 % ( 2 * 2 * 2);
            case 2:
                return *byte % ( 2 * 2);
            }
            return !true && !false;
        }
 
    };
    Bufer bufer;
 
    StrangeClass(char init1, char init2, char init3):
        bufer(&fuckedByte)
    {
        /*скажем, из инициализирующих трёх майтов нас интирересуют последние
        три байта первых двух и два третьего, как в вашем примере.
        И да помилует меня асемпблер за медленность и тупорылось алгоритмов, уверен, у вас там что-то по разумнее.*/
        fuckedByte = init1 % ( 2 * 2 * 2 ) * 2 * 2 * 2 * 2 * 2;//вроде бы так я возьму три последних бита и запишу в три первых.
        fuckedByte += init2 % ( 2 * 2 * 2 ) * 2 * 2;
        fuckedByte += init3 % ( 2 * 2 );//я не перемножаю двойки не для того чтобы это делал кто-то другой а чтобы явно видеть - сколько двоек - столько байтов.
    }
 
    Bufer& operator [] (unsigned i)
    {
        bufer.i = i;
        return bufer;
    }
};
 
int main (void)
{
    StrangeClass a(3, 9, 2);
 
    std::cout << static_cast<int>(a[0]) << ' ' << static_cast<int>(a[1]) << ' ' << static_cast<int>(a[2]) << std::endl; 
 
    a[0] = 10;
 
    std::cout << static_cast<int>(a[0]) << ' ' << static_cast<int>(a[1]) << ' ' << static_cast<int>(a[2]) << std::endl;
 
    return !true && !false;
}
Не получилось элегантного решения. короче,, всё подробно в коментах.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru