Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
5 / 5 / 2
Регистрация: 25.08.2013
Сообщений: 67
1

Шаблонные классы

06.04.2014, 20:14. Показов 758. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Вопрос такой: есть класс
C++
1
2
3
4
5
6
class A
{
public:
    int x;
    A* z;
}
Мне нужно сделать его шаблонным, а именно, чтобы тип поля z был шаблонным, т.е. так:
C++
1
2
3
4
5
6
7
template<class T>
class A
{
public:
    int x;
    T* z;
}
И я хочу потом сделать, допустим, список из объектов типа A. Элемент списка объявлять значит надо так:
C++
1
A<A> elem;
Но тогда получается, что тот класс A, который записан внутри скобок, не имеет параметра, т.е. надо писать как-то так:
C++
1
A<A<A<A<...> > > > elem;
Но нельзя же писать до бесконечности. Как можно в этом случае объявить переменную elem?

Добавлено через 29 минут
Может можно написать что-то похожее на
C++
1
2
3
4
5
6
7
template<class T>
class A
{
public:
    int x;
    T<T>* z;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2014, 20:14
Ответы с готовыми решениями:

Шаблонные классы
Помогите разобраться с шаблонными классами template &lt;class Type&gt; class CL1 { }; class CL2 {...

Шаблонные классы
Добрый вечер,дорогие форумчане, подскажите пожалуйста верный синтаксис для шаблонного класса(где...

Шаблонные классы
Как сделать вот такой класс шаблонным? #ifndef CVECTOR_H #define CVECTOR_H #include &lt;iostream&gt;...

Шаблонные классы
Есть задание, на скрине ниже Помогите, как инициализировать объект PairArray в конструкторе класса...

12
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
06.04.2014, 20:26 2
Цитата Сообщение от maria_ Посмотреть сообщение
A<A> elem;
разве? а не A<T> ?
при виде A<A> у меня мозг вскипел мб я чего-то не понимаю
0
5 / 5 / 2
Регистрация: 25.08.2013
Сообщений: 67
06.04.2014, 20:30  [ТС] 3
При создании экземпляра класса надо ведь в скобках уже что-то конкретное писать, а не T.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<class T>
class A
{
public:
    int x;
    T* z;
}
 
int main()
{
    A<A> elem; //вот здесь нельзя ведь A<T> elem написать
    return 0;
}
0
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
06.04.2014, 20:31 4
Цитата Сообщение от maria_ Посмотреть сообщение
При создании экземпляра класса надо ведь в скобках уже что-то конкретное писать, а не T.
логично, но не сам же класс....

у вас T* z для чего нужен?
0
5 / 5 / 2
Регистрация: 25.08.2013
Сообщений: 67
06.04.2014, 20:36  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template<class T>
class A
{
public:
    int x;
    T* z;
}
 
class B
{
    int x;
}
 
int main()
{
    A<B> elem; //другой же класс в скобках можно писать, а как сделать, чтоб можно было написать тот же
    return 0;
}
Добавлено через 3 минуты
Поле A* z нужно, чтобы иметь из объекта класса указатель на другой объект того же класса. Но для общности, если понадобится указатель на объект другого класса нужен шаблон Т.
0
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
06.04.2014, 20:37 6
масло масленое...
в любом случае вам придётся как-то ограничить ваш А<A<A...>> , иначе будет бесконечность,
тоже самое что vector <vector<int> >
0
5 / 5 / 2
Регистрация: 25.08.2013
Сообщений: 67
06.04.2014, 20:39  [ТС] 7
В том и вопрос, как это ограничить, если заранее неизвестна длина этой цепочки
0
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
06.04.2014, 20:43 8
Цитата Сообщение от maria_ Посмотреть сообщение
В том и вопрос, как это ограничить, если заранее неизвестна длина этой цепочки
вообще имхо подход неверный...хотя задачи не знаю)
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,718
06.04.2014, 20:44 9
что-то вы зарапортовались.
Все гораздо проще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<class T>
class A
{
public:
    T x;
    A<T>* next;
};
int main()
{
    A<int> k;
    k.x=0;
    k.next=0;
    return 0;
}
0
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
06.04.2014, 20:51 10
Цитата Сообщение от zss Посмотреть сообщение
что-то вы зарапортовались.
Все гораздо проще
ТС хочет сделать какую-то мегавещь, чтобы в списке был не только A<T> , но и скажем B<T> и т.п.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.04.2014, 23:44 11
Цитата Сообщение от dzrkot Посмотреть сообщение
чтобы в списке был не только A<T> , но и скажем B<T>
Ну, если у них будет общий базовый класс, то почему бы и нет...
maria_, как задача поставлена изначально, что нужно сделать и зачем?
0
5 / 5 / 2
Регистрация: 25.08.2013
Сообщений: 67
07.04.2014, 11:01  [ТС] 12
Задача такая: есть структура данных - какой-то класс. В нём должно быть шаблонное поле, которое при создании объекта класса можно сделать указателем на объект того же класса. Причём у того объекта, на который указывают, данное поле должно быть того же типа (т.е. указатель на объект этого класса). Зачем это нужно - для общности.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
07.04.2014, 11:41 13
maria_, так разве этого не достаточно?
C++
1
2
3
4
5
template <class T>
struct S
{
   S<T>* ptr;
};
0
07.04.2014, 11:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2014, 11:41
Помогаю со студенческими работами здесь

Шаблонные классы
Помогите, пожалуйста! Не понимаю как реализовать! Создать параметризованный линейный кольцевой...

Шаблонные классы и оптимизация
Насколько в С++ проработана оптимизация шаблоннов? Действительно ли на каждый инстант шаблона...

Шаблонные дружественные классы
Походу с шаблоном разбираюсь, Node* стала приватным в моем классе-итераторе. #include &lt;iostream&gt;...

Шаблонные функции и классы
Добрый день. У меня возникли проблемки при использование шаблонных функций. Вот код class...

Шаблонные классы: найти и исправить ошибки в коде
Разбираюсь тут с шаблонами, вроде сделал все как в работающей программе, но не компилируется ...

Не удается написать шаблонные классы, синтаксические ошибки
Трудность заключается в том, что мне не удается написать правильно шаблонные классы, так как это...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru