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

Перегрузка оператора ‘=’ - C++

Восстановить пароль Регистрация
 
kilik
5 / 5 / 1
Регистрация: 15.11.2010
Сообщений: 58
26.10.2011, 20:58     Перегрузка оператора ‘=’ #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
struct HOUSE{
    int a;
    int b;
    int c;
};
 
template <class T_str>
class summary_list {
    T_str *tmp;
public:
    //не знаю как тут правильно сделвть((
    T_str& operator = (T_str &tl){return *tmp;};//ошибка
    T_str& operator = (){return *tmp;};//ошибка
    
};
 
 
int main(){
    //проверка работоспособности 
    summary_list<int> t1;
    int k1=5;
    t1=k1;
    k1=t1;
 
    summary_list<HOUSE> t2;
    HOUSE k2;
    k2.a=5;
    k2.b=6;
    k2.c=10;
 
    t2=k2;
    k2=t2;
           return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 20:58     Перегрузка оператора ‘=’
Посмотрите здесь:

C++ Перегрузка оператора +=
Перегрузка оператора = C++
Перегрузка оператора * C++
Перегрузка оператора ~ C++
C++ Перегрузка оператора <<
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
26.10.2011, 21:06     Перегрузка оператора ‘=’ #2
Цитата Сообщение от kilik Посмотреть сообщение
Подскажите, пожалуйста, можно ли как-то перегрузить оператор равно.
Чтобы можно было его использовать как с правой, так и с левой стороны. С любым типом данных.
На примере изложил суть проблемы:
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
struct HOUSE{
    int a;
    int b;
    int c;
};
 
template <class T_str>
class summary_list {
    T_str *tmp;
public:
    //не знаю как тут правильно сделвть((
    T_str& operator = (T_str &tl){return *tmp;};//ошибка
    T_str& operator = (){return *tmp;};//ошибка
    
};
 
 
int main(){
    //проверка работоспособности 
    summary_list<int> t1;
    int k1=5;
    t1=k1;
    k1=t1;
 
    summary_list<HOUSE> t2;
    HOUSE k2;
    k2.a=5;
    k2.b=6;
    k2.c=10;
 
    t2=k2;
    k2=t2;
           return 0;
}
Это не "оператор равно", а оператор присваивания. Оператор присваивания должен быть нестатическим членом класса ровно с одним параметром.

Поэтому в вашем случае, когда вы хотите целочисленному объекту присвоить значение объекта типа класса, вам нужно написать функцию-член класса преобразования объекта класса в целочисленный тип. Тогда, когда компилятор встретит подобный код, когда слева от знака присваивания стоит целочисленный объект, он преобразует ваш объект класса, стоящий справа от знака присваивания, в этот целочисленный тип.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
26.10.2011, 21:12     Перегрузка оператора ‘=’ #3
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
struct HOUSE{
        int a;
        int b;
        int c;
};
 
template <class T_str>
class summary_list {
        T_str *tmp;
public:
        summary_list() {}
        summary_list(T_str& value) {tmp = &value;}
        T_str& operator=(T_str &tl)
        {
            tmp = &tl;
            return tl;
        };
        summary_list& operator=(const summary_list &tl)
        {
            if (this == tl) return *this;
            tmp = tl.tmp;
            return *this;
        };
        summary_list(const summary_list<T_str>& t)
        {
            tmp = t.tmp;
        }
        operator T_str() { return *tmp; }
};
 
 
int main(){
        //проверка работоспособности 
        summary_list<int> t1;
        int k1=5;
        t1=k1;
        k1=t1;
 
        summary_list<HOUSE> t2;
        HOUSE k2;
        k2.a=5;
        k2.b=6;
        k2.c=10;
 
        t2=k2;
        k2=t2;
           return 0;
}
оно скомпилировалось, но в смысл я не вдавался
здесь нужно использовать конструктор копирования
и оператор приведения типа
kilik
5 / 5 / 1
Регистрация: 15.11.2010
Сообщений: 58
26.10.2011, 21:27  [ТС]     Перегрузка оператора ‘=’ #4
Огромное Спасибо за помощь.
Буду разбираться.
Yandex
Объявления
26.10.2011, 21:27     Перегрузка оператора ‘=’
Ответ Создать тему
Опции темы

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