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

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

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

Можно ли "подменить" тип данных в процессе выполнения? - C++

24.07.2015, 16:40. Просмотров 285. Ответов 5
Метки нет (Все метки)

Добрый день!

Есть у меня такой кусок кода, описывающего класс.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef vector<double> complex;
typedef map<string, double> datablock;
typedef map<string, complex> acdatablock;
 
class PsfFileReader {
public:
  PsfFileReader(string S1);
  datablock getDataBlock();
...
  ifstream File;
 
private:
  datablock readDataBlock();
  string FileName;
...
  datablock DataBlock;
  bool DbEmpty;
  datablock prevDataBlock;
  bool PrevDbEmpty;
  bool ReadFile;
}; // PsfFileReader
Определено 2 типа: datablock и acdatablock.
Какой из 2-х типов будет использоваться, становится известно только в момент работы конструктора.
Разница между datablock и acdatablock - в том, что первый содержит действительные числа (double), а второй - комплексные (как известно, для комплексного числа нужна пара double). Я решил класть эту пару в вектор.

Вопрос - надо ли класть рядом acdatablock и писать второй комплект функций-членов, с ним работающих, или можно делать подмену по ходу дела, с помощью шаблонов, например?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2015, 16:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли "подменить" тип данных в процессе выполнения? (C++):

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Тип данных "Anketa" - не получается ввести пол - C++
когда запускается программа в первом пункте, не получается ввести пол не подскажите в чем проблема? #include &lt;iostream&gt; #include...

Определить тип данных "множество целых чисел" - C++
Доброго времени суток, есть несколько задачек, не могу с ними справиться :( Может кто-нибудь сможет... Заранее огромное спасибо! ...

Для чего функции поместили в "тип данных"? - C++
Вопрос про функции. Для чего функции поместили в &quot;тип данных&quot;?

Разработать класс, обьект которого реализует "пользовательский" тип данных - C++
Помогите сдать экзамен, не было времени подготовится) могу даже оплатить работу если угодно. Задача Разработать класс, обьект...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nonedark2008
909 / 648 / 134
Регистрация: 28.07.2012
Сообщений: 1,760
24.07.2015, 16:50 #2
Цитата Сообщение от rotciv Посмотреть сообщение
Какой из 2-х типов будет использоваться, становится известно только в момент работы конструктора.
Действительные числа - это частный случай комплекстных.
Цитата Сообщение от rotciv Посмотреть сообщение
как известно, для комплексного числа нужна пара double
Для пары используй
Код
std::pair
или собственную структуру с двумя переменными.

А вообще, думаю тут все можно красиво разрешить с использованием шаблонов (template) и перегрузкой операторов.
0
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
24.07.2015, 16:51 #3
А не проще ли везде пользоваться классом map<string, complex> ведь double конвертируем в complex.
0
rotciv
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
24.07.2015, 17:35  [ТС] #4
Цитата Сообщение от Ilot Посмотреть сообщение
А не проще ли везде пользоваться классом map<string, complex> ведь double конвертируем в complex.
Да, действительно. Можно использовать std::complex и свой тип с векторами не городить.
Возможно, я потеряю в эффективности, если везде свои double заменю на complex.
То есть, вы предлагаете вместо double иметь (real, 0) и тогда у меня будет комплексная арифметика, которая даст такой же результат?
Хм, я даже не думал о таком.
Цель моей программы - сравнение последовательности чисел и вывод "совпадают - не совпадают" и "насколько не совпадают". Я планировал сравнивать по отдельности действительную и мнимую части.

А если вычитать по правилам комплексной арифметики... об этом надо подумать, смогу ли я получить то, что надо.
0
rotciv
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
27.07.2015, 13:29  [ТС] #5
Не хочет map кушать std::complex.

C++
1
2
3
4
#include <map>
#include <complex>
 
typedef map<string, complex> datablock;
In file included from main.cpp:6:
defs.h:119: error: type/value mismatch at argument 2 in template parameter list for \u2018template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map\u2019
defs.h:119: error: expected a type, got \u2018complex\u2019
0
DrOffset
7152 / 4293 / 968
Регистрация: 30.01.2014
Сообщений: 7,094
27.07.2015, 14:23 #6
Цитата Сообщение от rotciv Посмотреть сообщение
typedef map<string, complex> datablock;
C++
1
typedef map<string, complex<double> > datablock;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2015, 14:23
Привет! Вот еще темы с ответами:

Объяснить термин "абстрактный тип данных" - C++
Почему именно он абстрактный? Не зависит от типа входных параметров, а еще от чего?

Что Вы понимаете под "абстрактным типом", "абстракцией данных" и "абстрактными операциями"? - C++
А давайте займёмся археологией! И проследим как менялся смысл понятий &quot;абстрактный тип данных&quot;, &quot;абстракция данных&quot; и &quot;абстрактные...

Абстрактный тип данных "СПИСОК" - C++
Помогите с лабораторной на С++, пожалуйста:wall: В расписании сохраняется информация о движении поездов по станции...

Абстрактный тип данных "Собака" - C++
Доброго времени суток. Я - студент политеха по специальности микроэлектроника и нанотехнологии. нам поставили программирование на с++, до...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.07.2015, 14:23
Ответ Создать тему
Опции темы

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