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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
#1

шаблоны оператор присваивания - C++

11.07.2011, 17:36. Просмотров 1288. Ответов 0
Метки нет (Все метки)

здраствуйте! надо по заданию накатать стек с таким оператором присваивания, чтобы можно было приравнивать стеки разных типов, если конечно преобразование возможно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <typename T, typename C = std::vector<T> >
class stack
{
    C elems;
public:
    T       top() const;
    void    pop();
    void    push(T const&);
    size_t  size() const;
    bool    empty() const;
 
    template <typename T2>
            stack<T, C>&  operator=(stack<T2, C> const&);
 
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <typename T, typename C>
        template <typename T2> 
                stack<T, C>& stack<T, C>::operator =(stack<T2, C> const& rhv)
{
    if ((void*)this == (void*)&rhv)
        return *this;
 
    stack<T2, C> temp(rhv);
 
    elems.clear();
 
    while (!temp.empty())
    {
        elems.push_front(temp.top());
        temp.pop();
    }
 
    return *this;
}
пытался я приравнять stack<int> = stack<double> например, но пишет:
/home/alex/stack1/main.cpp:15: ошибка: no match for ‘operator=’ in ‘stk = stk2’
/home/alex/stack1/stack.h:9: замечание: претенденты: stack<int, std::vector<int, std::allocator<int> > >& stack<int, std::vector<int, std::allocator<int> > >::operator=(const stack<int, std::vector<int, std::allocator<int> > >&)
нашёл он мой оператор, а чё пользоваться им не хочет не могу понять?

Добавлено через 2 минуты
а кажется понял ошибку, тогда ещё с C понты будут

Добавлено через 4 минуты
всё разобрался
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
template <typename T, typename C = std::deque<T> >
class stack
{
    C elems;
public:
    T       top() const;
    void    pop();
    void    push(T const&);
    size_t  size() const;
    bool    empty() const;
 
    template <typename T2, typename C2>
            stack<T, C>&  operator=(stack<T2, C2> const&);
 
};
 
template <typename T, typename C>
        template <typename T2, typename C2>
            stack<T, C>& stack<T, C>::operator =(stack<T2, C2> const& rhv)
{
    if ((void*)this == (void*)&rhv)
        return *this;
 
    stack<T2, C2> temp(rhv);
 
    elems.clear();
 
    while (!temp.empty())
    {
        elems.push_front(temp.top());
        temp.pop();
    }
 
    return *this;
}
час ошибку искал, а как сюда выложил, так сразу и нашёл почему то
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2011, 17:36     шаблоны оператор присваивания
Посмотрите здесь:

Оператор присваивания. - C++
Всем привет!В универе щас работаем с классами и перегрузками.В частности перегрузкой оператора присваивания и индексации.И я в упор не...

Оператор присваивания - C++
Какая разница между оператором &quot;=&quot; и &quot;==&quot; Почему , например , в цикле нужно писать while(count==1) а не ...

Оператор присваивания - C++
Почему в этом случае вызывается оператор присваивания Fraction f4; f4 = f1+f2+f3; а в другом не вызывается: ...

оператор присваивания - C++
Привет всем ! Каким образом вызывается оператор присваивания, например, здесь: a = &quot;I &quot;; если в аргументе char*, а в операторе...

Оператор присваивания в c++ - C++
Такой вопрос, для каких классов следует явно перегрузить оператор присваивания??

оператор присваивания - C++
Подскажите пожалуйста, вот я создал класс, конструктор которого создает 2хмерный массив из 2ойного указателя, являющейся членом этого...

Оператор присваивания - C++
Добрый день! Помогите, пожалуйста, разобраться. Я не совсем понимаю работу перегруженного оператора присваивания в классе String, который...

Перегруженный оператор присваивания - C++
Добрый вечер! Встретил пример в книге, где есть перегруженный оператор присваивания. В итоге код который написан в книге не запускается. Во...

Перегруженный оператор присваивания - C++
Достаточно информации прочитал, что такое перегруж. оператор присваивания, но не до конца понимаю суть данного вопроса - &quot;в каком месте...

Оператор присваивания по умолчанию - C++
#include &lt;iostream&gt; using namespace std; class Foo { private: int var; //int var = 17; public: /*Foo&amp;...

Оператор присваивания и деструктор - C++
Вопрос: почему в 52 строке Access violation? Если убрать строку 50, все будет нормально. #include &lt;iostream&gt; using namespace std; ...

Конструктор копий. Оператор присваивания - C++
В классе есть массив char (не динамический) размером 40 байт. Вопрос1: нужно ли для такого класса определять конструктор копий или...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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