powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Оператор присваивания (VC)
25 сообщений из 26, страница 1 из 2
Оператор присваивания (VC)
    #34757347
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Встретился с такой вещью. Вопрос чисто по C++:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class A {
  protected:
    double b;
    double c;
  public: // constructors
    A() {}
    A(double B, double C) { b = B; c = C; }
    virtual ~A(){}
    // operators
    A&operator=(A&a) { b = a.b; c = a.c; return this; }

    // error -> A&operator=(double BC) { b = B; c = BC; return this; } 
    // tip-top ->
   A(bool SomeEmpty) {}
   A&operator=(double BC) { b = B; c = BC; return A(true); } 
}
A a =  10 ;
a =  3 ;
Почему нельзя возвращать в операторе (ругается на преобразование типов):
Код: plaintext
1.
A&operator=(double BC) { b = B; c = BC; return this; }
Заранее спасибо
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757367
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, еще - на преобразование "return (A&)this" говорит, что справа д.б. l-value.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757369
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что нельзя возвращать?

А так по коду:
Код: plaintext
1.
2.
3.
4.
5.
A&operator=(double BC) { b = B; c = BC; return A(true); } 
  //Возвращается ссылка на временный объект. Когда объект будет присваиваться он уже будет убит
A&operator=(double BC) { b = B; c = BC; return this; }
  //надо возвращать ссылку на объект, а не указатель - *this
  //определение литеры B в упор не вижу
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757374
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1211212Да, еще - на преобразование "return (A&)this" говорит, что справа д.б. l-value.

this - это указатель.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757405
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь, писал прямо здесь...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class A {
  protected:
    double b;
    double c;
  public: // constructors
    A() {}
    A(double B, double C) { b = B; c = C; }
    virtual ~A(){}
    // operators
    A&operator=(A&a) { b = a.b; c = a.c; return this; }

    // error -> A&operator=(double BC) { b = B; c = BC; return this; } 
    // tip-top ->
   A(bool SomeEmpty) {}
   A&operator=(double BC) { b = BC; c = BC; return A(true); } 
}
A a =  10 ;
a =  3 ;
Я не спорю, что this - указатель, но
Код: plaintext
A&operator=(A&a) { b = a.b; c = a.c; return this; } 
- нормально, а такая запись:
Код: plaintext
A&operator=(double BC) { b = B; c = BC; return this; } 
- ошибка. В общем, это и не понятно.

С пустым конструктором вроде все проходит нормально.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757413
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
......
Код: plaintext
A&operator=(double BC) { b = BС; c = BC; return this; } 
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757457
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1211212
Я не спорю, что this - указатель, но
Код: plaintext
A&operator=(A&a) { b = a.b; c = a.c; return this; } 
- нормально, а такая запись:
Код: plaintext
A&operator=(double BC) { b = BС; c = BC; return this; } 
- ошибка. В общем, это и не понятно.

С пустым конструктором вроде все проходит нормально.

1) не нормально - должно возврщаться *this. Почему, - написал выше.
2) Ошибка должна быть такой же как в п1. Приведи текст ошибки.

А что с конструктором может быть, если у тебя все ошибки от не правельного возвращения результата?
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757459
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тебе же сказали this - указатель, поэтому возвращать надо *this
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757480
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedНу тебе же сказали this - указатель, поэтому возвращать надо *this

Больше всего мне понравилось:
Я не спорю, что this - указатель, но

Код: plaintext
A&operator=(A&a) { b = a.b; c = a.c; return this; } 
- нормально

;)
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757486
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OK, а пустой - ерунда (в смысле ничего страшного)? Я, по правде сказать, ни нашел ничего лучшего.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757497
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh blindedНу тебе же сказали this - указатель, поэтому возвращать надо *this

Больше всего мне понравилось:
Я не спорю, что this - указатель, но

Код: plaintext
A&operator=(A&a) { b = a.b; c = a.c; return this; } 
- нормально

;)
и в чем здесь проблема? И также - почему это работает?
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757505
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1211212OK, а пустой - ерунда (в смысле ничего страшного)? Я, по правде сказать, ни нашел ничего лучшего.

Пустой - ты не инициализировал свойства объекта.

Тебе вообще что надо то? :)

Привел какие-то конструкторы и операторы, причем с ошибками, и спрашиваешь - "это ничего страшного?". Ничего страшного - вообще ничего не писать. :)
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757510
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1211212 Akh blindedНу тебе же сказали this - указатель, поэтому возвращать надо *this

Больше всего мне понравилось:
Я не спорю, что this - указатель, но

Код: plaintext
A&operator=(A&a) { b = a.b; c = a.c; return this; } 
- нормально

;)
и в чем здесь проблема? И также - почему это работает?

На каком компиляторе это у тебя работает? Приведи полный код работающий тестовой программы с этим оператором.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757534
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибочка вышла, просто не дотестировал. Там действительно д.б. ошибка.
MSDN
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
// assignment.cpp
class Point
{
public:
   Point &operator=( Point & );  // Right side is the argument.
   int _x, _y;
};

// Define assignment operator.
Point &Point::operator=( Point &ptRHS )
{
   _x = ptRHS._x;
   _y = ptRHS._y;

   return *this;  // Assignment operator returns left side.
}

int main()
{
}

Не делал тестирования присваивания, видимо поэтому компилятор не ругался.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757561
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, спасибо за отклики. Просто во всех случаях "*this".
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757568
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1211212Не делал тестирования присваивания, видимо поэтому компилятор не ругался.

Ты лучше в учебник по синатаксису залезь узнать что такое *this и A&. А то таким макаром с msdn-ом у тебя зубреж без знаний получиться.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757625
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле, я действительно не понимаю - зачем в данном случае что-нибудь возвращать вообще.

Такой вариант, вроде бы, должен быть вполне рабочим:
Код: plaintext
1.
void operator=(A&a) { b = a.b; c = a.c; }
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757710
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1211212На самом деле, я действительно не понимаю - зачем в данном случае что-нибудь возвращать вообще.

Такой вариант, вроде бы, должен быть вполне рабочим:
Код: plaintext
1.
void operator=(A&a) { b = a.b; c = a.c; }


Можно, но ты не сможешь пользовать каскадное присваивание.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757773
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОК, выполнение справа налево, последовательное.
Код: plaintext
1.
2.
class A( 1 , 2 ), B, C;
C = B = A;
Атрибуты B присваиваются, затем оператор присваивания снова. Вроде должно все отработать?

Я не вполне уверен, но я так понял, что статический оператор присваивания запрещен. Не подскажете хорошую ссылку по теме? Просто ничего не нашел в google.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757798
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вредно делать несколько дел сразу:
Код: plaintext
1.
2.
A a( 1 , 2 ), b, c;
c = b = a;
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34757927
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ужули любоытно - Эффективное использование С++. Скотт Мейерс. Там все о операторе присваивания
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34758012
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1211212вредно делать несколько дел сразу:
Код: plaintext
1.
2.
A a( 1 , 2 ), b, c;
c = b = a;


Ничего подобного.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34758063
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh 1211212вредно делать несколько дел сразу:
Код: plaintext
1.
2.
A a( 1 , 2 ), b, c;
c = b = a;


Ничего подобного.
Это на счет нескольких дел или void?

blinded[quot 1211212]Ужули любоытно - Эффективное использование С++. Скотт Мейерс. Там все о операторе присваивания[/src]

Интересная вещь, спасибо. Все линки в интернете в каком-то кривом формате. Нет ли ссылки на pdf?

PS: на строку "Мейерс" google выдает варианты с "Мейерс" и "Майерс"
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34758081
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1211212 Akh 1211212вредно делать несколько дел сразу:
Код: plaintext
1.
2.
A a( 1 , 2 ), b, c;
c = b = a;


Ничего подобного.
Это на счет нескольких дел или void?


нескольких дел. Компактный (необфусцированный) код еще никому не мешал.
...
Рейтинг: 0 / 0
Оператор присваивания (VC)
    #34758235
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Оператор присваивания (VC)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]