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

Использование операторов шаблона класса - C++

Восстановить пароль Регистрация
 
winnisp
 Аватар для winnisp
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 25
18.01.2013, 15:22     Использование операторов шаблона класса #1
Приветствую, уважаемые форумчане. Я - начинающий программист, во время чтения книги Ст. Липмана "Язык программирования вводный курс" решил написать программку, для которой понадобилось создать шаблон структурки. Появилась проблема с операторами, привожу упрощенную схему структуры:

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
#include <iostream>
template<typename T>
// Определение структрурки CC
struct CC
{
    CC<T>& operator = ( const CC<T> &rp );
    CC(T c=0): cont(c) { }
    T cont;
};
// Используемые операторы
// оператор суммы
template<typename T>
CC<T>& operator + ( const CC<T> &lpr, const CC<T> &rpr )
{
    CC<T> ret;
    ret.cont=lpr.cont+rpr.cont;
    return ret;
};
// оператор присвоения
template<typename T>
CC<T>& CC<T>::operator = (const CC<T> &rpr )
{
    this->cont=rpr.cont;
    return *this;
};
// оператор умножения на константу
template<typename T>
CC<T>& operator * ( const CC<T> &lpr, const double c)
{
    CC<T> ret;
    ret.cont=lpr.cont*c;
    return ret;
};
// умонжение константы на число
template<typename T>
CC<T>& operator * ( const double c, const CC<T> &lpr )
{
    CC<T> ret;
    ret.cont=lpr.cont*c;
    return ret;
};
 
void main()
{
    CC<int> a(3),b(2),c;
    c=2*a*2;
    std::cout<<c.cont;
    system("pause");
}
Если делать c=2*a то в итоге получаем ответ 6, если использовать оператор c=a*2, то также получаем в ответе 6, а вот если выполнять как показано выше, то в ответе получаем 0, причем при пошаговой отладке в VS 2010, при выполнении оператора умножения константы на объект получаем объект СС со значением cont=6, а при выполнении оператора умножения объекта на константу происходит обнуление параметра объекта rpr, при определении объекта ret.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2013, 15:22     Использование операторов шаблона класса
Посмотрите здесь:

Использование операторов цикла C++
Использование операторов цикла C++
C++ Использование шаблона класса
Использование объекта одного класса при создании нового класса C++
C++ Создание шаблона с перегрузкой стандартных операторов
C++ Определение метода-шаблона за пределами шаблона класса
Использование шаблона функции C++
Использование конструктора класса-шаблона C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
FreeMinder
 Аватар для FreeMinder
36 / 36 / 2
Регистрация: 29.08.2012
Сообщений: 59
18.01.2013, 15:54     Использование операторов шаблона класса #2
Вы возвращаете из функций временный объект по ссылке
winnisp
 Аватар для winnisp
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 25
18.01.2013, 16:04  [ТС]     Использование операторов шаблона класса #3
Да уж, глупая ошибка, надо повнимательнее перечитать ссылки и указатели...
Yandex
Объявления
18.01.2013, 16:04     Использование операторов шаблона класса
Ответ Создать тему
Опции темы

Текущее время: 08:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru