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

Перегрузка оператора индексации [] - 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 эти значения показываем. Спасибо! Делаю и делаю....:), но понял что я не близок к истине :( #include "stdafx.h" #include <iostream> using namespace std;
C++ Структуры Сформировать массив, содержащий сведения о количестве изделий категорий A,B,C, собранных рабочим за месяц. Структурный тип содержит поля: фамилия сборщика, наименование цеха, количество изделий по категориям, собранных рабочим за месяц. Считая заданными значения расценок SA, SB, SC за выполненную работу по сборке единицы изделия категорий A, B, C, выдать на печать следующую информацию: -общее... подробнее

Показать сообщение отдельно
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
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;
}
Не получилось элегантного решения. короче,, всё подробно в коментах.
 
Текущее время: 03:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru