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

Шаблон класса и дружественная функция - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамический список http://www.cyberforum.ru/cpp-beginners/thread924577.html
Вот есть класс..совсем не замысловатый! //=============================================================================...
C++ Использование функции cpp в проекте c Есть сишный проект, понадобилось прикрепить к нему один готовый плюсовый модуль. Схематичный вид этого модуля: //module.cpp namespace module_namespace { struct params { inline... http://www.cyberforum.ru/cpp-beginners/thread924536.html
C++ Быстрота работы
Скажите, какой алгоритм на языке C++ будет выполняться быстрее, если мы не знаем величину массива: в котором я создам сразу большой массив, а буду использовать только часть. Или быстрее будет...
Как записывать в массив с 2 переменными текст C++
Как записывать в массив с 2 переменными,текст,тоесть есть массив mas, в а="привет", в b="пока";
C++ stack around the variable was corrupted масив через указатель http://www.cyberforum.ru/cpp-beginners/thread924484.html
Такая проблема - создаю масив целых чисел через функцию с использованием указателей - выскакивает данная ошибка, хотя код работает верно, почитал - что где-то идет переполнение, но как избавиться ума...
C++ Начало пути прогера Здравствуйте. Мне 19, перешел на 3 курс по специальности "Компьютерная безопасность". Уже 2 года периодически интересуюсь программированием, почитал некоторые книжки, попробовал написать код и каждый... подробнее

Показать сообщение отдельно
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1

Шаблон класса и дружественная функция - C++

17.07.2013, 14:38. Просмотров 498. Ответов 6
Метки (Все метки)

Доброго времени суток. Столкнулся с непониманием одного процесса. Задача звучит следующим образом:
Написать шаблон функции isEqualTo для сравнения 2-х параметров. Использовать эту функцию с объектом класса.
Для этого нужно перегрузить оператор ==.
Если я перегружаю оператор сравнения как элемент класса, работает нормально
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
template <class T>
bool isEqualTo(T &a, T &b)
{
    return (a == b);
}
 
template <class T>
class Test
{
public:
    Test(T x = 0, T y = 0) { a = x; b = y; }
    void print() const;
    bool operator == (Test<T> &);
 
private:
    T a;
    T b;
};
 
template <class T>
bool Test<T>::operator==(Test<T> &x)
{
    Test temp = *this;
    return (temp.a == x.a && temp.b == x.b);
}
 
 
template <class T>
void Test<T>::print() const
{
    cout << a << " " << b << endl;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int x = 10, y = 10;
 
    cout << isEqualTo(x, y) << endl;
 
    Test<int> t(10, 10), t1(10, 10);
    cout << isEqualTo(t, t1) << endl;
 
    system("pause");
    return 0;
}

А если я пытаюсь сделать перегрузку оператора как дружественную функцию с 2-мя аргументами, то ничего не получается (уже несколько способов пробовал)
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 "stdafx.h"
#include <iostream>
using namespace std;
 
template <class T>
bool isEqualTo(T &a, T &b)
{
    return (a == b);
}
 
template <class T>
class Test
{
    friend bool operator == (Test<T> &, Test<T> &);
public:
    Test(T x = 0, T y = 0) { a = x; b = y; }
    void print() const;
 
private:
    T a;
    T b;
};
 
 
template <class T>
bool operator == (Test<T> &x, Test<T> &y)
{
    return (x.a == y.a && x.b == y.b);
}
 
template <class T>
void Test<T>::print() const
{
    cout << a << " " << b << endl;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int x = 10, y = 10;
 
    cout << isEqualTo(x, y) << endl;
 
    Test<int> t(10, 10), t1(10, 10);
    cout << isEqualTo(t, t1) << endl;
 
    system("pause");
    return 0;
}
Вопрос: где туплю?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru