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

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

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

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

06.04.2014, 20:14. Просмотров 478. Ответов 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++
Как сделать вот такой класс шаблонным? #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++
Есть задание, на скрине ниже Помогите, как инициализировать объект PairArray в конструкторе класса Wine?(Wine.cpp) Pair.h ...

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
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,995
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,995
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,995
06.04.2014, 20:43     Шаблонные классы #8
Цитата Сообщение от maria_ Посмотреть сообщение
В том и вопрос, как это ограничить, если заранее неизвестна длина этой цепочки
вообще имхо подход неверный...хотя задачи не знаю)
zss
Модератор
Эксперт С++
6287 / 5890 / 1909
Регистрация: 18.12.2011
Сообщений: 15,121
Завершенные тесты: 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,995
06.04.2014, 20:51     Шаблонные классы #10
Цитата Сообщение от zss Посмотреть сообщение
что-то вы зарапортовались.
Все гораздо проще
ТС хочет сделать какую-то мегавещь, чтобы в списке был не только A<T> , но и скажем B<T> и т.п.
Tulosba
:)
Эксперт С++
4392 / 3235 / 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
Задача такая: есть структура данных - какой-то класс. В нём должно быть шаблонное поле, которое при создании объекта класса можно сделать указателем на объект того же класса. Причём у того объекта, на который указывают, данное поле должно быть того же типа (т.е. указатель на объект этого класса). Зачем это нужно - для общности.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 11:41     Шаблонные классы
Еще ссылки по теме:

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

Шаблонные функции - C++
Помогите, пожалуйста, реализовать шаблонную функцию, которая переставляет элементы в массиве

Шаблонные функции - C++
Чет не получается написать шаблонную функцию. func.h template &lt;class T&gt; T strnstr (T str, T substr, unsigned int count) { ...

Шаблонные функции - C++
Читал у Праты про шаблонные функции, и везде они описаны наподобие template &lt;typename Any&gt; void Swap (Any &amp;a, Any &amp;b) А если нужно...

Шаблонные функции в C++ - C++
Каждый раз когда вижу код, который должен быть простым и понятным, я понимаю его немного хуже. Вот наш код: template &lt;typename T,...


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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4392 / 3235 / 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;
};
Yandex
Объявления
07.04.2014, 11:41     Шаблонные классы
Ответ Создать тему
Опции темы

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