Russian Qt Forum
Ноябрь 23, 2024, 08:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Шаблоны  (Прочитано 3787 раз)
yngwie
Гость
« : Июнь 20, 2009, 15:20 »

здравствуйте вот код, есть пара вопросов:
Код:
#include "stdafx.h"
#include <iostream>
template <class T>
class Pair
{
public:
    Pair(T x1, T y1) : x(x1), y(y1){;}
    void showQ();
private:
    T x,y;
};
int _tmain(int argc, _TCHAR* argv[])
{
    Pair<double> a(37.0,5.0);
    Pair<int> u(37,5);
    a.showQ();
    u.showQ();
    return 0;
}
template <class T>
void Pair<T>::showQ()
{
    std::cout<<x/y<<std::endl;
}
1) при объявлении
Код:
Pair<double> a(37.0,5.0);
Pair<int> u(37,5);
Мы указываем шаблонному классу, параметры какого типа мы передаем в конструктор, чтобы шаблонный класс мог сформировать конструктор соответствующего типа. Правильно?
2) Зачем при описании функции show(), в названии класса добавляется <T> (Pair<T>::showQ()), это же и так понятно что это функция шаблонного класса
Записан
spectre71
Гость
« Ответ #1 : Июнь 20, 2009, 16:09 »

Насколько я понимаю, поскольку можно сделать так
void Pair<int>::showQ()
{
    std::cout<<x/y<<std::endl;
}
Для конкретного типа. Но я могу ошибаться.
Записан
denka
Гость
« Ответ #2 : Июнь 20, 2009, 20:27 »

1 Не правильно. Потому как конструктор вобще может не использывать шаблонный тип. Но при объявлении объекта типом которого являеться шаблонный класс ты всегда должен указывать конкретный тип. Это позволяет компилятору сгенерировать нужный тип "на лету"

2 Грубо говоря синтаксис такой Улыбающийся. Компилятор требует наличия имени класса перед именем члена ф-ции
Записан
spectre71
Гость
« Ответ #3 : Июнь 20, 2009, 21:17 »

2 Грубо говоря синтаксис такой Улыбающийся. Компилятор требует наличия имени класса перед именем члена ф-ции
Синтаксис от фонаря не изобретается, в нормальных языках он несет семантическую нагрузку, так что это не ответ.
Записан
yngwie
Гость
« Ответ #4 : Июнь 21, 2009, 14:30 »

Это позволяет компилятору сгенерировать нужный тип "на лету"
значит везде где в шаблонном классе объявлен тип Т, то он будет заменен на тот что указан при создании объекта, это также касается и реализаций функций, которые описаны в этом классе. так?
Записан
denka
Гость
« Ответ #5 : Июнь 21, 2009, 15:56 »

Именно
Записан
denka
Гость
« Ответ #6 : Июнь 21, 2009, 16:09 »

2 Грубо говоря синтаксис такой Улыбающийся. Компилятор требует наличия имени класса перед именем члена ф-ции
Синтаксис от фонаря не изобретается, в нормальных языках он несет семантическую нагрузку, так что это не ответ.

Хм.. Ну дал бы тогда полноценный ответ. Вот тебе ответ:
Цитировать
Члены шаблона класса объявляются и определяются точно так же, как и для обычного класса. Член шаблона не обязательно определять внутри самого шаблона. В этом случае где-то должно существовать его определение, точно так же, как и в случае с классом не являющемся шаблоном. Члены шаблоны класса в свою очередь являются шаблонами, параметризованными при помощи аргументов шаблона

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.16 секунд. Запросов: 20.