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

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

Войти
Регистрация
Восстановить пароль
 
maria_
5 / 5 / 1
Регистрация: 25.08.2013
Сообщений: 67
#1

Шаблонные классы - C++

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

Добрый день! Вопрос такой: есть класс
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
06.04.2014, 20:26     Шаблонные классы #2
Цитата Сообщение от maria_ Посмотреть сообщение
A<A> elem;
разве? а не A<T> ?
при виде A<A> у меня мозг вскипел мб я чего-то не понимаю
maria_
5 / 5 / 1
Регистрация: 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;
}
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
06.04.2014, 20:31     Шаблонные классы #4
Цитата Сообщение от maria_ Посмотреть сообщение
При создании экземпляра класса надо ведь в скобках уже что-то конкретное писать, а не T.
логично, но не сам же класс....

у вас T* z для чего нужен?
maria_
5 / 5 / 1
Регистрация: 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 нужно, чтобы иметь из объекта класса указатель на другой объект того же класса. Но для общности, если понадобится указатель на объект другого класса нужен шаблон Т.
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
06.04.2014, 20:37     Шаблонные классы #6
масло масленое...
в любом случае вам придётся как-то ограничить ваш А<A<A...>> , иначе будет бесконечность,
тоже самое что vector <vector<int> >
maria_
5 / 5 / 1
Регистрация: 25.08.2013
Сообщений: 67
06.04.2014, 20:39  [ТС]     Шаблонные классы #7
В том и вопрос, как это ограничить, если заранее неизвестна длина этой цепочки
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
06.04.2014, 20:43     Шаблонные классы #8
Цитата Сообщение от maria_ Посмотреть сообщение
В том и вопрос, как это ограничить, если заранее неизвестна длина этой цепочки
вообще имхо подход неверный...хотя задачи не знаю)
zss
Модератор
Эксперт С++
6190 / 5793 / 1875
Регистрация: 18.12.2011
Сообщений: 14,799
Завершенные тесты: 1
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;
}
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,994
06.04.2014, 20:51     Шаблонные классы #10
Цитата Сообщение от zss Посмотреть сообщение
что-то вы зарапортовались.
Все гораздо проще
ТС хочет сделать какую-то мегавещь, чтобы в списке был не только A<T> , но и скажем B<T> и т.п.
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.04.2014, 23:44     Шаблонные классы #11
Цитата Сообщение от dzrkot Посмотреть сообщение
чтобы в списке был не только A<T> , но и скажем B<T>
Ну, если у них будет общий базовый класс, то почему бы и нет...
maria_, как задача поставлена изначально, что нужно сделать и зачем?
maria_
5 / 5 / 1
Регистрация: 25.08.2013
Сообщений: 67
07.04.2014, 11:01  [ТС]     Шаблонные классы #12
Задача такая: есть структура данных - какой-то класс. В нём должно быть шаблонное поле, которое при создании объекта класса можно сделать указателем на объект того же класса. Причём у того объекта, на который указывают, данное поле должно быть того же типа (т.е. указатель на объект этого класса). Зачем это нужно - для общности.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 11:41     Шаблонные классы
Еще ссылки по теме:

C++ Шаблонные структуры
C++ Шаблонные классы
C++ Шаблонные дружественные классы
C++ Шаблонные функции
C++ Шаблонные классы

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.04.2014, 11:41     Шаблонные классы #13
maria_, так разве этого не достаточно?
C++
1
2
3
4
5
template <class T>
struct S
{
   S<T>* ptr;
};
Yandex
Объявления
07.04.2014, 11:41     Шаблонные классы
Ответ Создать тему
Опции темы

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