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

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

Войти
Регистрация
Восстановить пароль
 
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
#1

Шаблон - C++

15.11.2010, 11:41. Просмотров 742. Ответов 15
Метки нет (Все метки)

Всем доброе время суток))
Вот нпаисал прогу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <string.h>
#include <iostream>
using namespace std;
 
template<class T>
class List{
private:
        struct Element{
                T key;
                Element *next;
        };
        Element* pbeg;
        Element* pend;
public:
        List(){
                pbeg = 0;
                pend = 0;
        }
        T& operator <<(int a);
        T& operator >>(int& a);
        void print();
        ~List(){
            while(pbeg){
                Element* temp = pbeg;
                pbeg = pbeg->next;
                delete temp;
                temp = 0; 
            }
        }
};
 
template<class T>T& List<T>::operator << (int a){
    Element* ph = new Element;
    ph->key = a;
    ph->next = 0;
    if (pend!=0){
        pend->next = ph;
        pend = ph;
    }
    else{
        pbeg = ph;
        pend = ph;
    }
    return *this;
}
template<class T>T& List<T>::operator>>(int &a){
    if(pbeg){
        a = pbeg->key;
        Element* ph = pbeg;
        pbeg = pbeg->next;
        delete ph;
        return *this;
    }
    else{
        throw "Нет элементов!\n";
    }
}
template<class T>void List<T>::print(){
    Element* temp = pbeg;
    while(temp){
        cout << " " << temp->key;
        temp = temp->next;
    }
    cout << endl;
}
int main(){
    setlocale(LC_ALL,"Russian");
    List<int> w; int b=0;int a;
    while(true){
        cout<<"1) Заполнить очередь"<<endl;
        cout<<"2) Вывести на экран"<<endl;
        cout<<"3) Удалить элемент"<<endl;
        cout<<"0) Выход"<<endl;
        cout<<"Ввод: "; cin>>b;
        if (b == 1){
            system("cls");
            cout<<"Введите значение: ";
            cin>>a;
            w<<a;
        }
        if (b == 2){
            system("cls");
            cout<<"Список: ";
            w.print();
            cout<<endl;
        }
        if (b == 3){
            try{
                system("cls");
                w>>a;
            }
            catch(char error){
                cout<<error<<endl;
            }
        }
        if (b == 0)break;
    }
}
Но не могу сделать так что бы переменная "а" принимала тот же тип, что и шаблон. И еще выдает ошибку когда пытаюсь сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<class T>T& List<T>::operator << (int a){
    Element* ph = new Element;
    ph->key = a;
    ph->next = 0;
    if (pend!=0){
        pend->next = ph;
        pend = ph;
    }
    else{
        pbeg = ph;
        pend = ph;
    }
    return *this;//error C2440: return: невозможно преобразовать "List<T>" в "int &"
}
Ну и во сторой функции тоже самое. Помогите плиз)))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2010, 11:41     Шаблон
Посмотрите здесь:

шаблон - C++
подскажите, пожалуйста, как на языке СИ сравнить слово с шаблоном ? то есть, например, есть шаблон *%#, где * - только цифры, % - только...

Шаблон - C++
Доброго времени суток. Есть две функции: void mouseMove( int x, int y, int speed = 1, int xMaxOffset = 0, int yMaxOffset = 0 ); void...

Шаблон - C++
Имеется код: //header #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;valarray&gt; using namespace std; template &lt;class T1,...

Шаблон - C++
Подскажите пожалуйста про шаблон! Создать шаблон класса: двухсвязный список. Добавления элементов int, string;

Шаблон - C++
Создать класс-шаблон, содержащий поля для хранения одномерного массива и количества элементов в массиве. Описать методы для инициализации и...

Шаблон функции - C++
Объясните в чем ошибка) Задание: 2. Примером удачного применения функции шаблона есть функция find (), которая ищет элемент object в...

Шаблон структуры - C++
Создать шаблон структуры &quot;владелец автомобиля&quot; со следующими полями : фамилия, имя, номер автомобиля, дата постановки на учет(структура -...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.11.2010, 12:02     Шаблон #2
Цитата Сообщение от robert19 Посмотреть сообщение
C++
1
//error C2440: return: невозможно преобразовать "List<T>" в "int &"
Более, чем странно, так как this имеет тип указателя на T, а по твоей декларации ожидается ссылка на Т.
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
15.11.2010, 12:07  [ТС]     Шаблон #3
как исправить? Вот не знаю как переменную "а" сделать типом "Т". Тогда думаю было бы все тип-топ
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.11.2010, 12:11     Шаблон #4
Цитата Сообщение от robert19 Посмотреть сообщение
Но не могу сделать так что бы переменная "а" принимала тот же тип, что и шаблон.
Что это значит?
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
15.11.2010, 12:30  [ТС]     Шаблон #5
Ну что бы мне добавить элемент в очередь или же от туда удалить я завожу переменную "а", но она типа int а мне нужно что бы она автоматом принимала тот тип которым будет объект.
например я завел:
C++
1
 List<int> w; int a;
Теперь Т = int
А если
C++
1
 List<char> w;int a;
Т = char
И вот как сделать что бы 'а' тоже автоматом была равная 'Т'

Добавлено через 27 секунд
может я просто не очень понятно объясняю. незнаю даже как сказать то подробнее
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.11.2010, 12:35     Шаблон #6
Сам уже глючу, this указывает не на T, а на List. А ожидается ссылка на T. Но звёздочкой ты преобразуешь указатель в ссылку, не меняя типа. Поменяй декларацию на
C++
1
List<T> & operator << (<T> a);
.

Добавлено через 1 минуту
Цитата Сообщение от robert19 Посмотреть сообщение
Т = char
И вот как сделать что бы 'а' тоже автоматом была равная 'Т'
Комп не способен догадаться о какой либо связи между w и a. Поэтому если хочешь, чтоб a имела базовый тип, то пиши явно:
C++
1
List<char>w; char a;
.
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 226
Регистрация: 12.12.2009
Сообщений: 7,222
Записей в блоге: 1
Завершенные тесты: 1
15.11.2010, 12:56     Шаблон #7
Цитата Сообщение от robert19 Посмотреть сообщение
Т = char
И вот как сделать что бы 'а' тоже автоматом была равная 'Т'
Можно сделать отдельную ф-цию, которая будет создавать 2 указателя (один на List<T>, второй на тип Т), динамически выделять "под них" память и возвращать эти указатели. Таким образом можно добится того, "что бы 'а' тоже автоматом была равная 'Т'"
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.11.2010, 13:14     Шаблон #8
Бред. Функции работают в runtime, а типы переменных задаются в deisgnedtime. Кроме того, ни одна функция, кроме возвращающих runtime информацию о типе (в том числе, о расходе на него памяти (suizeof)), не примет тип в качестве параметра.

Добавлено через 4 минуты
Вы когда массивы объявляете и вам нужны переменные базовых типов этих массивов (например, буфер для обмена двух элементов местами имеет базовый тип массива, то есть тип элемента) тоже пытаетесь сделать автомат, обеспечивающий совпадение типов? Уж если надо перетипизировать конейнерные типы, а перетипизировать одновременно буфера базовых типов лень, то под каждый вариант базового типа создавайте или макрос, или синонимичный тип.

Добавлено через 1 минуту
C++
1
2
3
#define TIten int
List <TItem>w;
TItem a;
. Здесь хоть как меняй int на char, потом на double, тип a будет оставаться совпадающим с базовым типом w.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
15.11.2010, 13:16     Шаблон #9
Опиши подробнее, как ты хочешь, чтобы работали операторы "<<" и ">>". Не совсем понятно, чего ты добиваешься.
Kastaneda
15.11.2010, 13:31
  #10

Не по теме:

Бред. Функции работают в runtime, а типы переменных задаются в deisgnedtime. Кроме того, ни одна функция, кроме возвращающих runtime информацию о типе (в том числе, о расходе на него памяти (suizeof)), не примет тип в качестве параметра.
Да, согласен. Что-то я перекодил

P.S. Вчера поздно вечером минут 30 не мог понять почему sizeof не правильно возвращает длину строки О_о

robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
15.11.2010, 13:48  [ТС]     Шаблон #11
Цитата Сообщение от volovzi Посмотреть сообщение
Опиши подробнее, как ты хочешь, чтобы работали операторы "<<" и ">>". Не совсем понятно, чего ты добиваешься.
хочу добиться того, что бы:
я содал объект List<int> w; int a;
Теперь с помощью перегруженной операции '<<' мне нужно добавить элемент в очередь. Я ввожу 3 и он его добавляет и т.д.
Но если я создам объект List<char> w; то и переменную 'a' мне тоже придется менять тип на char. дак вот что бы так каждый раз не менять, я и хотел бы как нить сделать, что бы переменная принимала тот тип как у объекта 'w'.
т.е. если
C++
1
2
List<double> w; то и double a;
List<float> w; то и float a;
Добавлено через 14 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
Сам уже глючу, this указывает не на T, а на List. А ожидается ссылка на T. Но звёздочкой ты преобразуешь указатель в ссылку, не меняя типа. Поменяй декларацию на
C++
1
List<T> & operator << (<T> a);
.
Что то все равно ошибки(((
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
15.11.2010, 13:54     Шаблон #12
robert19, а что эти операторы возвращают? Ссылку на новый список?
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
15.11.2010, 13:55  [ТС]     Шаблон #13
Цитата Сообщение от volovzi Посмотреть сообщение
robert19, а что эти операторы возвращают? Ссылку на новый список?
Почему на новый то
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
15.11.2010, 13:58     Шаблон #14
Что эти операторы возвращают?

Добавлено через 27 секунд
Поправка: что должны возвращать?
robert19
25 / 25 / 3
Регистрация: 26.03.2010
Сообщений: 305
15.11.2010, 14:01  [ТС]     Шаблон #15
Цитата Сообщение от volovzi Посмотреть сообщение
Что эти операторы возвращают?

Добавлено через 27 секунд
Поправка: что должны возвращать?
возвращает ссылку на объект
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2010, 14:06     Шаблон
Еще ссылки по теме:

Шаблон функции - C++
Написать шаблон функции для вычисления суммы элементов, находящихся между первым и последним нулевыми элементами. Помогите пожалуста! ...

Класс-шаблон - C++
Создать класс-шаблон, содержащий поля для хранения одномерного массива и количества элементов в массиве. Описать методы для инициализации и...

Переписать в шаблон - C++
Здравствуйте, уважаемые программисты, помогите пожалуйста переписать задание в шаблон. #include &lt;iostream.h&gt; #include &lt;conio.h&gt; ...

Шаблон класса с++ - C++
StakNode.h #ifndef _STACKNODE_H_ #define _STACKNODE_H_ #include &lt;string&gt; template&lt;class T&gt; class Stack { ...

шаблон map - C++
пожалуйста дайте ссылку или напишите пример шаблона класса map с итератором.


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

Или воспользуйтесь поиском по форуму:
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
15.11.2010, 14:06     Шаблон #16
На какой объект?
Yandex
Объявления
15.11.2010, 14:06     Шаблон
Ответ Создать тему
Опции темы

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