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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
#1

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

05.11.2012, 14:07. Просмотров 1144. Ответов 12
Метки нет (Все метки)

Помогите разобраться с шаблонными классами

C++
1
2
3
4
5
6
7
8
9
10
11
template <class Type>
class CL1 {
};
 
class CL2 {
};
 
 int main(void) { 
     CL1<void> s1;
     CL2 s2;
 }
Не могу понять зачем при создании объекта шаблонного класса надо писать тип CL1<void> s1; ???
Мы же не пишем его при объявлении объекта в обычном классе... Для чего это надо??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2012, 14:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблонные классы (C++):

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

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

Шаблонные классы - C++
Добрый день! Вопрос такой: есть класс class A { public: int x; A* z; } Мне нужно сделать его шаблонным, а...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,231
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 14:15 #2
Цитата Сообщение от Egor138 Посмотреть сообщение
Не могу понять зачем при создании объекта шаблонного класса надо писать тип CL1<void> s1;
В зависимости от того, какой тип Вы укажете, будет создан соответствующий класс. Для примера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <stdlib.h>
using namespace std;
 
template<class T>
class CL1{
public:
    T x;
    T y;
};
 
int main()
{   setlocale(LC_ALL,"Russian");
    CL1<int> C1;
    CL1<double> C2;
    cout<<sizeof(C1)<<endl;
    cout<<sizeof(C2)<<endl;
    system("pause");
}
Здесь при CL1<int> C1; создается класс
C++
1
2
3
4
5
class честно_не_знаю_названия{
public:
    int x;
    int y;
};
а при CL1<double> C2;
C++
1
2
3
4
5
class честно_не_знаю_названия{
public:
    double x;
    double y;
};
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
05.11.2012, 14:22  [ТС] #3
А если мне нужно чтобы создался вот такоей класс

C++
1
2
3
4
5
class честно_не_знаю_названия{
public:
    string x;
    double y;
};

Нужно писать template <class T1, class T2> ???
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
05.11.2012, 14:26 #4
Нужно читать книжку по синтаксису C++.
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,231
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 14:26 #5
Цитата Сообщение от Egor138 Посмотреть сообщение
Нужно писать template <class T1, class T2> ???
Да.
C++
1
2
3
4
5
template <class T1, class T2>
class XXX{
T1 x;
T2 y;
};
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
05.11.2012, 14:32  [ТС] #6
А как мне создать вектор, хранящий объекты этого класса???

Такая запись уже не прокатит

C++
1
vector <CL1> vec;
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
05.11.2012, 14:38 #7
Цитата Сообщение от Egor138 Посмотреть сообщение
А как мне создать вектор, хранящий объекты этого класса???
C++
1
2
3
typedef CL1<int,string> CL;
    CL C1;
    vector<CL1<int,string>> vec;
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,231
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 14:40 #8
Цитата Сообщение от Egor138 Посмотреть сообщение
А как мне создать вектор, хранящий объекты этого класса???
C++
1
vector<XXX<string,double>ТУТ_ПРОБЕЛ> F;
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
05.11.2012, 14:41 #9
>ТУТ_ПРОБЕЛ>
Не нужен там уже никакой пробел, C++11 отменяет это требование.
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,231
Записей в блоге: 3
Завершенные тесты: 1
05.11.2012, 14:43 #10
Шаблонный класс генерируется в момент, когда происходит объявление переменной данного класса, то есть можно сделать и так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <stdlib.h>
using namespace std;
 
#define CL1(mytype) typedef class ClassMTR_##mytype {public: mytype x; mytype y;}
 
int main()
{   setlocale(LC_ALL,"Russian");
    CL1(int) C1;
    CL1(double) C2;
 
    cout<<sizeof(C1)<<endl;
    cout<<sizeof(C2)<<endl;
    system("pause");
}
Ну не совсем,конечно правильно, ибо два раза объявить не получится

Добавлено через 30 секунд
Цитата Сообщение от Герц Посмотреть сообщение
Не нужен там уже никакой пробел, C++11 отменяет это требование.
НЕ ВСЕ еще имеют компиляторы полностью поддерживающие C++11.
И если он у Вас есть, то это не значит, что есть у всех
Герц
05.11.2012, 15:14
  #11

Не по теме:

НЕ ВСЕ еще имеют компиляторы полностью поддерживающие C++11.
И если он у Вас есть, то это не значит, что есть у всех
Ага, и компиляторы, поддерживающие шаблоны, тоже не все имеют. Поэтому надо свой неполноценный велосипед на препроцессоре изобретать.

Croessmah
05.11.2012, 15:17
  #12

Не по теме:

Цитата Сообщение от Герц Посмотреть сообщение
Ага, и компиляторы, поддерживающие шаблоны, тоже не все имеют. Поэтому надо свой неполноценный велосипед на препроцессоре изобретать. С такими замашками тебе не на C писать надо.
Но если ТС задает тему с шаблонами, значит имеется соответствующий компилятор, а вот про С++11 тут ничего не сказано. А Вам следует писать с помощью стандарта С++23, на будущее сразу, как появится соответствующий компилятор - скомпилируете =)

OhMyGodSoLong
05.11.2012, 15:58     Шаблонные классы
  #13

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
А Вам следует писать с помощью стандарта С++23, на будущее сразу, как появится соответствующий компилятор - скомпилируете =)
Между С++23 и C++11 есть одно большое отличие: второй уже является текущим стандартом. Так что, если говорить строго, это теперь те, кто пользуется старыми компиляторами C++03, должны упоминать про необходимость совместимости со старой версией.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2012, 15:58
Привет! Вот еще темы с ответами:

Шаблонные классы. Присвоение к указателю и приведение типов - 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
Объявления
05.11.2012, 15:58
Ответ Создать тему
Опции темы

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