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

"Двойной" доступ к переменным класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ С++, какую среду разработки выбрать? http://www.cyberforum.ru/cpp-beginners/thread713444.html
Появилось желание изучить язык программирования. Собственно, интересует какая разница, и существует ли она вообще между С++ и Visual C++? Какую среду разработки используют профессиональные программисты?
C++ Описать структуру ZNAK Описать структуру ZNAK, содержащую следующие поля: • Фамилия, имя • Знак зодиака • Дата рождения (массив из 3 чисел). Программа должна выполнять следующие действия: • Ввод с клавиатуры данных в массив, состоящий из n элементов типа ZNAK; записи должны быть упорядочены по датам рождения; • Вывод на экран информации о человеке, чья фамилия введена с клавиатуры; Если такого нет, выдать на... http://www.cyberforum.ru/cpp-beginners/thread713435.html
C++ CUDA на примерах
Скомпилировал из данной книги несколько вариантов программы(не важно какой): с глобальной, константной, текстурной памятью. Измерил, как описано в коде, время выполнения кода CUDA функциями: cudaEventCreate(), cudaEventRecord(), cudaEventElapsedTime() на старой паршивой карте: Asus NVidia GeForce 8500 GT. Все работает и время выполнения каждого варианта получаю разное,-в зависимости от...
C++ Сортировка массива указателей на абстрактный базовый класс
Я создал абстрактный базовый класс (с названием Base) и два производных класса (с названиями Two и Three). После инициализации объектов производных классов каждый из этих объектов имеет два данных-члена: string и double. Вопрос: как можно организовать сортировку всех созданных объектов (и объектов Two, и объектов Three)? Первое мое действие - я создаю массив указателей на АБК Base и помещаю в...
C++ Контроль ввода http://www.cyberforum.ru/cpp-beginners/thread713413.html
Задача: написать программу, которая дает пользователю ввести массив, а потом при помощи функции подсчитать символы. Вот код: #include <iostream> using namespace std; const int ArSize=10; void strcount(const char * str); int main() { char input; char next; cout<<"Enter a line:\n";
C++ Удаление и добавление звена в линейном списке Здравствуйте тётеньки и дяденьки!!!...Помогите мне дописать код... Задача: Картотека в бюро обмена квартир организована в виде линейного списка. Сведения о каждой квартире включают: -количество комнат; -этаж; -площадь; -адрес. Написать программу, которая обеспечивает: -начальное формирование картотеки; -ввод заявки на обмен; подробнее

Показать сообщение отдельно
scriptus
1 / 1 / 0
Регистрация: 08.02.2012
Сообщений: 16

"Двойной" доступ к переменным класса - C++

29.11.2012, 17:40. Просмотров 769. Ответов 17
Метки (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class EnumerousVariables
{
public:
    EnumerousVariables();
    ~EnumerousVariables();
 
    TypeA&  getA() const;
    TypeB&  getB() const;
    // ...
    TypeZZ& getZZ() const;
 
    UniformType& operator [] (int i) const;
 
private:
    Type A a;
    TypeB b;
    // ...
    TypeZZ zz;
};
Класс содержит много переменных разных типов с соответствующими методами доступа к ним. Хочется реализовать метод доступа по индексу (нужен для внешнего модуля), причем все переменные должны конвертироваться к одному типу UniformType. Последний представляет из себя примерно следующее:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class UniformType
{
public:
    UniformType()
    UniformType(const TypeA& _a);
    UniformType(const TypeB& _b);
    // ...
    UniformType(const TypeZZ& _zz);
 
    ~UniformType();
 
    TypeA&  toTypeA(bool& isOK) const;
    TypeB&  toTypeB(bool& isOK) const;
    // ...
    TypeZZ& toTypeZZ(bool& isOK) const;
};
Будем считать, что порядок следования переменных по индексу определен. В данном примере, допустим, алфавитный. Т.е. хочется иметь следующее:

C++
1
2
3
4
5
EnumerousVariables foo = EnumerousVariables();
// где:
// foo[0] == UniformType(foo.getA())
// foo[1] == UniformType(foo.getB())
// и т.д.
Вопрос заключается в следующем. Как реализовать оператор [], не держа копий переменных и не используя switch-case?
В голову приходит только один вариант - изначально держать данные в виде контейнера переменных типа UniformType, а в соответсвующих get-ах set-ах конвертировать данные к(из) соответствующему типу, но это как-то не айс.

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