Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2018, 02:21   #1
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию Можно ли как то в классе принимать любой тип? - C++

Цитата:
//Программа ``Графический редактор'' должна хранить схему в виде
//заданной в задании структуры данных, где хранятся геометрические фигуры.
//Каждая фигура характеризуется уникальным идентификатором(int id), координатами на экране(x, y), а также своими параметрами.
//Программа должна уметь работать с фигурами, указанными в задании.Каждая фигуру должна уметь выводить на экран свои параметры в текстовом режиме с помощью метода print().Возможно, в будущем будут добавлены новые фигуры.
//
//Класс FigureList должен быть основан на связном списке.Связаный список должен быть реализован с помощью двух классов Node(элемент списка) и List(сам список).
//
//class FigureList
//{
// ? addToHead(? );// добавить фигуру в голову списка
// ? findFigure(int id);// найти фигуру всписке по идентификатору
// ? erase(? );// удалить фигуру из списка
// ? printAll(? );// вывести на экран в текстовом режиме информацию о всех фигурах в списке
//}
//Программа должна работать с фигурами Circle(параметры: радиус, надпись произвольной длины) и Segment(параметры: координаты начала и коодинаты конца).
я хочу фигуру задать классом как то так:
Код:
class AllData {
protected:
	int id;
	int x;
	int y;
public:
	AllData(int id=NULL, int x=NULL, int y=NULL)
	{
		this->id = id;
		this->x = x;
		this->y = y;
	}
	void getdata();
	void setdata(int id, int x, int y);
};
template<typename T>
class Figure :public AllData
{
protected:
	T p1;
	T p2;
public:
	Figure(T p1=T(), T p2=T()):AllData()
	{
		this->p1 = p1;
		this->p2 = p2;
	}
	void getdata();
	void setparam(T p1, T p2);
};
хотелось бы чтобы p1 и p2 при инициализации класса были не только int, но и string....
тоесть чтобы я мог делать Figure aaa("qwe",22); и Figure bbb(11,22);
я знаю про шаблоны, template<typename T> но как бы это похитрее то придумать? прошу поддержки
знаю про boost::variant, std::variant с C++17
знаю про union Numeric{int i;string s;};

как сделать максимально правильно и красиво?
SadiQ228 вне форума Ответить с цитированием
Старый 18.07.2018, 07:33   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Не делать эту прослойку, а делать нужные классы.
AllData переименовываете в Figure и реализовываете нужных потомков Circle, Box, ...

P.S. Инициализировать инты нулом это что-то...
p51x на форуме Ответить с цитированием
Старый 19.07.2018, 21:11   #3
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию

перепишу свой вопрос:
как в связном списке принимать любые типы данных?
тоесть первыйй элемнет списка struct, второй class, третий string.
SadiQ228 вне форума Ответить с цитированием
Старый 19.07.2018, 21:50   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от SadiQ228 Посмотреть сообщение
как в связном списке принимать любые типы данных?
Например std::variant, только не в ту степь вас несет, вам в первом же ответе сказали как надо делать, правда не сказали, что надо хранить указатели на Figure.
waleri вне форума Ответить с цитированием
Старый 20.07.2018, 21:01   #5
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Например std::variant, только не в ту степь вас несет, вам в первом же ответе сказали как надо делать, правда не сказали, что надо хранить указатели на Figure.
не совсем соглашусь с вами коллега, тот умник просто повыпендривался, смысловой нагрузки в его ответе не увидел,
мне уже подсказали что фигуру надо наследовать от Node, потом просто подменять указатели, только вот в моей голове схема не рисуется пока)
SadiQ228 вне форума Ответить с цитированием
Старый 20.07.2018, 22:53   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от SadiQ228 Посмотреть сообщение
смысловой нагрузки в его ответе не увидел
Это не значит, что ее не было, но флаг вам в руки, наследуйте Node и подменяйте указатели...
waleri вне форума Ответить с цитированием
Старый 20.07.2018, 23:34   #7
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию

огласите если есть другие идеи
SadiQ228 вне форума Ответить с цитированием
Старый 20.07.2018, 23:54   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от SadiQ228 Посмотреть сообщение
огласите если есть другие идеи
Цитата:
Сообщение от p51x Посмотреть сообщение
AllData переименовываете в Figure и реализовываете нужных потомков Circle, Box, ...
В списке хранить указатели на Figure.
waleri вне форума Ответить с цитированием
Старый 21.07.2018, 22:26   #9
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию

пожалуйста пару слов поподробнее вот список ну понятно union или enum а может и struct не важно, эот список у кого хранится из родителей? как это будет работать? без кода хотя бы так словами
SadiQ228 вне форума Ответить с цитированием
Старый 23.07.2018, 00:51   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Прочитайте про виртуальные методы и для чего они служат.
Еще раз повторяю - список не union, и не enum и не struct а указатель на класс Figure, который есть родитель для всех нужных типов.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как указатель в классе может указывать на другой узел списка если он имеет тип самого этого класса? EricJForster Общие вопросы C/C++ 1 08.07.2016 00:13
Как сделать чтобы через форму можно было принимать почту и в таком формате - info@robot-robot. rafshm PHP 7 11.01.2013 13:00
Как можно сделать перечислимый тип видимым в нескольких классах vedro-compota C# (си шарп) 5 28.06.2011 19:51
Любой тип данных _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 8 09.08.2010 13:28
можно ли в одном классе реализовать несколько интерфейсов Galinka08 Общие вопросы по Java, Java SE, Kotlin 2 08.03.2008 21:33