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

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

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

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

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

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

C++
1
val = {10, 20, 15};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2012, 15:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка operator= (C++):

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

Перегрузка operator+ - C++
Как сложить суму годовы продаж всех компаний? Можно использовать перегрузку оператора +? #include <iostream.h> #include <math.h> ...

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

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

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

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

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

C++
1
`void Point::operator=(double, double)' must take exactly one argument
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.07.2012, 15:38 #4
Цитата Сообщение от Ksan Посмотреть сообщение
тогда что насчет этого?
Всё написано в сообщении. Справа может быть только один аргумент.
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
04.07.2012, 15:40  [ТС] #5
Цитата Сообщение от Deviaphan Посмотреть сообщение
В Сэ11 можно
Цитата Сообщение от Deviaphan Посмотреть сообщение
Справа может быть только один аргумент.
Вы противоречите сами себе.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.07.2012, 15:45 #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};
без создания промежуточного массива.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,544
Завершенные тесты: 3
04.07.2012, 15:59 #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;
}
Соответственно оператор = можно перегрузить так же.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.07.2012, 16:08 #8
Цитата Сообщение от ForEveR Посмотреть сообщение
так же
Точно! Список инициализации это называется! А то безымянные массивы какие-то...

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

Не по теме:

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

0
ForEveR
04.07.2012, 16:10
  #9

Не по теме:

Deviaphan, 12 RC умеет.

0
Deviaphan
04.07.2012, 16:14     Перегрузка operator=
  #10

Не по теме:

:dance3:

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2012, 16:14
Привет! Вот еще темы с ответами:

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

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

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

Перегрузка operator+ - C++
Нужно сложить число с каждым елементом вектора, вот мой код: MyVectorClass.h namespace program { class MyVectorClass { ...


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

Или воспользуйтесь поиском по форуму:
10
04.07.2012, 16:14
Ответ Создать тему
Опции темы

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