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

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

Войти
Регистрация
Восстановить пароль
 
kilik
5 / 5 / 1
Регистрация: 15.11.2010
Сообщений: 58
#1

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

26.10.2011, 20:58. Просмотров 526. Ответов 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
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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 20:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора ‘=’ (C++):

Перегрузка оператора + и = - C++
Здравствуйте! Возникла проблема при реализации кода перегрузки операторов. BigInt - это просто класс характеризующий огромные числа в...

Перегрузка оператора - C++
Есть такой вот код: #include &lt;iostream&gt; using namespace std; template &lt;class T&gt; class LIST { T field; unsigned long long int...

перегрузка оператора - C++
Как перегрузить оператор , чтобы его можно было использовать для операций присваивания новых значений определённого члена массива? покажите...

Перегрузка оператора - C++
Здравствуйте. Не могу разобраться, как перезагрузить оператор &gt;&gt;. int a; cin &gt;&gt; a; Надо, чтобы a умножалось на некое число,...

Перегрузка оператора + - C++
Вот заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using namespace...

Перегрузка оператора = - 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;
}
Это не "оператор равно", а оператор присваивания. Оператор присваивания должен быть нестатическим членом класса ровно с одним параметром.

Поэтому в вашем случае, когда вы хотите целочисленному объекту присвоить значение объекта типа класса, вам нужно написать функцию-член класса преобразования объекта класса в целочисленный тип. Тогда, когда компилятор встретит подобный код, когда слева от знака присваивания стоит целочисленный объект, он преобразует ваш объект класса, стоящий справа от знака присваивания, в этот целочисленный тип.
1
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
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;
}
оно скомпилировалось, но в смысл я не вдавался
здесь нужно использовать конструктор копирования
и оператор приведения типа
1
kilik
5 / 5 / 1
Регистрация: 15.11.2010
Сообщений: 58
26.10.2011, 21:27  [ТС] #4
Огромное Спасибо за помощь.
Буду разбираться.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 21:27
Привет! Вот еще темы с ответами:

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

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

Перегрузка оператора ++ - C++
#include &quot;Operation.h&quot; using namespace std; const int COUNT = 10; int _tmain(int argc, _TCHAR* argv) { srand((unsigned...

Перегрузка оператора = - C++
StringOne&amp; StringOne::operator=(char *s) { char b; strcpy(b, s); StringOne a = b; return a;//возвращает тоже самое почемуто...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.10.2011, 21:27
Ответ Создать тему
Опции темы

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