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

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

Войти
Регистрация
Восстановить пароль
 
_stanislav
15 / 65 / 23
Регистрация: 16.08.2014
Сообщений: 422
Завершенные тесты: 2
#1

Объединить два похожих класса - C++

01.07.2015, 14:15. Просмотров 344. Ответов 6
Метки нет (Все метки)

Доброго времени суток. Есть два класса, полностью одинаковых в логике, различие только в том что один содержит один enum, второй другой. Как объединить эти два класса что бы уменьшить объем кода, склоняюсь к использованию шаблонов, только не знаю как.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Base { };
 
class A : public Base
{
public:
    enum EnumA { };
 
    //Методы...
};
 
class B : public Base
{
public:
    enum EnumB { };
 
    //Методы...
};
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2015, 14:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объединить два похожих класса (C++):

айти в массиве A(2n) два числа наиболее похожих по значению - C++
Задание:Из массива A(2n) получить 2 массива B(n) и С(n) в таком виде: найти в массиве A(2n) два числа наиболее похожих по значению, меньшее...

Объединить два массива - C++
#include<iostream> using namespace std; int* BuildArray(int n){ int* arr=new int; int flag = 0; while (flag != 1){ ...

Объединить два файла F1 и F2 в третий - C++
Даны два файла F1, F2. Сформировать третий фаил F, в который сначала записать все элементы файла F1, а затем - элементы файла F2. (С++)

Объединить два массива в один - C++
Помогите с переводом pascal кода в C++ program prog0523b; uses crt; var x, y: array of integer; z: array of integer; ...

Объединить два упорядоченных массива - C++
Пожалуйста, помогите сделать лабораторную по программированию с массивами на С++ Буду очень благодарен( 2.Даны два массива А и В...

Объединить два упорядоченных массива - C++
3. Даны два массива A и B размера 5, элементы которых упорядочены по убыванию. Объединить эти массивы так, чтобы результирующий массив...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
01.07.2015, 15:33 #2
Попробуйте так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
enum EnumA {valuea,... };
enum EnumB {valueb,... };
template<class T>
class A : public Base
{
public:
    T data;
    //Методы...
};
...
A<EnumA> a;
a.data=valuea;
A<EnumB> b;
b.data=valueb;
1
_stanislav
15 / 65 / 23
Регистрация: 16.08.2014
Сообщений: 422
Завершенные тесты: 2
01.07.2015, 18:27  [ТС] #3
zss. Если использовать шаблоны, то класс Base автоматически становится шаблонным? И на него действуют все ограничения шаблонов? И еще вопрос, если использовать способ предложенный тобой, то как в нем организовать вот такой метод?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A: public Base
{
public:
    enum Enum{ NONE, OTHER_1, OTHER_2 };
 
    void Set(Enum e)
    {
          if (e < NONE || e > OTHER_2) operationType = NONE;
          else operationType = e;
    }
 
private:
    Enum value;
};
Спасибо.
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
01.07.2015, 18:49 #4
Base Остается нешаблонным

Получится что-то типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
enum EnumA{ NONE, OTHER_1, OTHER_2 };
enum EnumB{ NONEB, OTHER_1B, OTHER_2B };
template<class T>
class A: public Base
{
public:
 
    void Set(T e)
    {
          if (e < (T)NONE || e > (T)OTHER_2) 
              operationType = (T)NONE;
          else 
             operationType = e;
    }
 
private:
    T operationType;
};
...
A<EnumA> a;
a.Set(OTHER_1);
A<EnumB> b;
b.Set(OTHER_2B);
1
_stanislav
15 / 65 / 23
Регистрация: 16.08.2014
Сообщений: 422
Завершенные тесты: 2
01.07.2015, 19:31  [ТС] #5
Получается что метод Set может работать только с EnumA ? Нужно как нибудь обстрагироваться от конкретного Enuma.
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
01.07.2015, 19:35 #6
Почему это?
В строке 21 - с EnumA
а в 23 - с EnumB
0
_stanislav
15 / 65 / 23
Регистрация: 16.08.2014
Сообщений: 422
Завершенные тесты: 2
01.07.2015, 19:38  [ТС] #7
Это потому что структура энумов одинаковая, а вот если энумы разные?

Добавлено через 1 минуту
Создать дополнительный класс свойств? И передавать его в параметрах шаблона?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 19:38
Привет! Вот еще темы с ответами:

Объединить два контейнера set - C++
У меня есть два сета, их надо как то обьеденить в один сет. Как это сделать? Вот мой код, он выдает ошибку - ругается на поле с merge. ...

Объединить два одномерных массива C++ - C++
Доброго времени суток! вопрос такой...необходимо написать функцию для объединения 2-х одномерных массивов...передача параметров в функцию...

Объединить два массива друг за другом - C++
1. Даны 2 одномерных массива А и В по К элементов каждый. Создать 3-й массив С из К * 2 элементов, переписывая сначала у него все...

Объединить два массива чередуя элементы - C++
2. Данные 2 одномерных массива А и В по К элементов каждый. * Создать 3-й массив С из К * 2 элементов, переписывая сначала у него по...


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

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

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