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

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

Войти
Регистрация
Восстановить пароль
 
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

Перегрузка operator= - C++

04.07.2012, 15:30. Просмотров 432. Ответов 9
Метки нет (Все метки)

Возможно ли перегрузить оператор= так, что бы можно было написать?

C++
1
val = {10, 20, 15};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2012, 15:30     Перегрузка operator=
Посмотрите здесь:

перегрузка operator<< - C++
помогите отгадать в чет ошибка class MCL{ private: int x,y; public: friend ostream&amp; operator&lt;&lt;(ostream &amp;s, MCL &amp;c); }; ...

Перегрузка operator+ - C++
при сложени myVector2 = myVector0 + myVector1; выодит сообщения &quot;конструктоор 0&quot; ...1,...2,....2(копирования) а потом деструктор 2,2,1,2...

Перегрузка operator<< - C++
Доброе время суток. Есть очередная задачка - перегрузить оператор вывода таким образом: Есть три объекта разных классов - А а, В...

Перегрузка operator-> () - C++
здравствуйте, объясните пож. как работает operator-&gt; (). Что происходит при этом мне понятно, но непонятно как. template &lt;typename T&gt; ...

Перегрузка operator<() - C++
#include &lt;QCoreApplication&gt; #include &lt;QDebug&gt; #include &lt;QVector&gt; class My { public: int a; void operator=(const...

Перегрузка operator[] - C++
Забыл как перегружать оператор для присваивания значений, а найти не могу ._. Чтобы было вот так: Class A { private: char...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.07.2012, 15:33     Перегрузка operator= #2
В Сэ11 можно и не нужно. В более старых стандартах запрещены безымянные массивы (правильный термин забыл, уж извиняйте).
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
04.07.2012, 15:36  [ТС]     Перегрузка operator= #3
Deviaphan, тогда что насчет этого?

C++
1
`void Point::operator=(double, double)' must take exactly one argument
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.07.2012, 15:38     Перегрузка operator= #4
Цитата Сообщение от Ksan Посмотреть сообщение
тогда что насчет этого?
Всё написано в сообщении. Справа может быть только один аргумент.
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
04.07.2012, 15:40  [ТС]     Перегрузка operator= #5
Цитата Сообщение от Deviaphan Посмотреть сообщение
В Сэ11 можно
Цитата Сообщение от Deviaphan Посмотреть сообщение
Справа может быть только один аргумент.
Вы противоречите сами себе.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.07.2012, 15:45     Перегрузка operator= #6
Цитата Сообщение от Ksan Посмотреть сообщение
Вы противоречите сами себе.
Представь себе, это не противоречие.

Добавлено через 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
#include <iostream>
 
struct A
{
    A& operator =( int b[10] )
    {
        for( int i =0; i < 10; ++i )
            a[i] = b[i];
        return *this;
    }
 
    int a[10];
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
 
    A aa;
    aa = a;
 
    for( int i =0; i < 10; ++i )
        std::cout << aa.a[i] << ' ';
 
    std::cin.get();
 
    return 0;
}
А по новому присваивание можно будет записать как
aa.a = {1,2,3,4,5,6,7,8,9,10};
без создания промежуточного массива.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
04.07.2012, 15:59     Перегрузка operator= #7
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <initializer_list>
 
template<typename T>
class Array
{
public:
   Array(const std::initializer_list<T>& lst):array_(lst)
   {
   }
   std::ostream& print(std::ostream& os) const
   {
      std::copy(array_.begin(), array_.end(), std::ostream_iterator<T>(os, " "));
      return os;
   }
private:
   std::vector<T> array_;
};
 
template<typename T>
std::ostream& operator <<(std::ostream& os, const Array<T>& arr)
{
   return arr.print(os);
}
 
int main()
{
   Array<int> a = {1,2,3,4,5,6,7};
   std::cout << a << std::endl;
}
Соответственно оператор = можно перегрузить так же.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.07.2012, 16:08     Перегрузка operator= #8
Цитата Сообщение от ForEveR Посмотреть сообщение
так же
Точно! Список инициализации это называется! А то безымянные массивы какие-то...

Добавлено через 5 минут

Не по теме:

Жаль, MSVС с ними не умеет работать.(((

ForEveR
04.07.2012, 16:10
  #9

Не по теме:

Deviaphan, 12 RC умеет.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2012, 16:14     Перегрузка operator=
Еще ссылки по теме:

Перегрузка operator new - C++
Столькнулся с такой проблемой: Есть класс Array, в его конструкторе создается массив int Array::Array(const size_t...

Перегрузка operator[][][] - C++
Здорова господа!!! Как перегрузить operator для класса или operator ??? Что нужно из него возвращать? От что то пытался но не...

Перегрузка operator->() - C++
Всем привет! Прохожу тему дескрипторов и меня удивляет как работает перегруженный operator-&gt;(). //какой то интерфейс struct...

Перегрузка operator[]= - C++
Привет народ, вопрос такой - что и как нужно перегрузить в классе, чтобы работал синтаксис вида class ADE {..}; ADE a; ... a |=...


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

Или воспользуйтесь поиском по форуму:
Deviaphan
04.07.2012, 16:14     Перегрузка operator=
  #10

Не по теме:

:dance3:

Yandex
Объявления
04.07.2012, 16:14     Перегрузка operator=
Ответ Создать тему
Опции темы

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