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

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

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

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

06.04.2014, 20:14. Просмотров 483. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2014, 20:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблонные классы (C++):

Шаблонные классы - C++
Есть задание, на скрине ниже Помогите, как инициализировать объект PairArray в конструкторе класса Wine?(Wine.cpp) Pair.h ...

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

Шаблонные классы - C++
Помогите разобраться с шаблонными классами template &lt;class Type&gt; class CL1 { }; class CL2 { }; int main(void) {

Шаблонные функции и классы - C++
Добрый день. У меня возникли проблемки при использование шаблонных функций. Вот код class LineTable{ private: AnsiString...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
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...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
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...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
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...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
06.04.2014, 20:43 #8
Цитата Сообщение от maria_ Посмотреть сообщение
В том и вопрос, как это ограничить, если заранее неизвестна длина этой цепочки
вообще имхо подход неверный...хотя задачи не знаю)
zss
Модератор
Эксперт С++
6361 / 5925 / 1921
Регистрация: 18.12.2011
Сообщений: 15,230
Завершенные тесты: 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...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
06.04.2014, 20:51 #10
Цитата Сообщение от zss Посмотреть сообщение
что-то вы зарапортовались.
Все гораздо проще
ТС хочет сделать какую-то мегавещь, чтобы в списке был не только A<T> , но и скажем B<T> и т.п.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
Задача такая: есть структура данных - какой-то класс. В нём должно быть шаблонное поле, которое при создании объекта класса можно сделать указателем на объект того же класса. Причём у того объекта, на который указывают, данное поле должно быть того же типа (т.е. указатель на объект этого класса). Зачем это нужно - для общности.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.04.2014, 11:41 #13
maria_, так разве этого не достаточно?
C++
1
2
3
4
5
template <class T>
struct S
{
   S<T>* ptr;
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 11:41
Привет! Вот еще темы с ответами:

Шаблонные классы. Присвоение к указателю и приведение типов - C++
Добрый вечер, ув. форум, есть к вам вопрос. Есть род. абстрактный класс: ParentAbstact Есть два наследника: ChildOne : public...

Сложить массивы почленно (используются шаблонные классы) - C++
Приветствую. Почему-то ни в одной моей теме ответа так и не наблюдается за последнее время. Надеюсь, поможете. Есть у нас лаба с таким...

Шаблонные классы: найти и исправить ошибки в коде - C++
Разбираюсь тут с шаблонами, вроде сделал все как в работающей программе, но не компилируется #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; ...

Шаблонные функции - C++
С помощью http://ru.wikipedia.org/wiki/Шаблоны_C%2B%2B пытался написать программу с шаблонной функцией по примеру использования который там...


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

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

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