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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.80
Algid
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 13
28.02.2010, 15:24     Перегрузка оператора #1
Здравствуйте.Появился вопрос:
есть две переменные float **m,**m1
как перегрузить оператор = в данном случае?(имею ввиду только первую строку,где объявляется перегрузка оператора
например Matrix &Matrix::operator=(Matrix &m))
и можно ли вообще это сделать?или нужно,чтобы был обязательно объявлен класс?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2010, 15:24     Перегрузка оператора
Посмотрите здесь:

C++ Перегрузка оператора +=
Перегрузка оператора = C++
Перегрузка оператора * C++
Перегрузка оператора ~ C++
C++ Перегрузка оператора <<
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
28.02.2010, 17:51     Перегрузка оператора #2
Переопределение операторов возможно только для вновь создаваемых типов (классы, структуры). Указатели же (неважно, на что) являются встроенным типом.
Algid
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 13
28.02.2010, 18:38  [ТС]     Перегрузка оператора #3
А если у нас перегрузка = для случая a=m
где float **a
Matrix m(класс)
можно такое реализовать?
или a тоже должно быть классом?
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
28.02.2010, 18:45     Перегрузка оператора #4
Цитата Сообщение от Algid Посмотреть сообщение
Здравствуйте.Появился вопрос:
есть две переменные float **m,**m
оператор в перегрузке не нуждается
возможно отвечу на вопрос следующими прототипами

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Class Matrix{
Matrix &operator = (float **a)
friend float** operator=(float **a,Matrix M)
}
 
Matrix &Matrix::operator = (const float **a){
 
return *this
}
 
 
 
float operator=(float **a , Matrix M){
 
float **temp;
 
return temp;
}
Михаэль
0 / 0 / 0
Регистрация: 22.02.2010
Сообщений: 15
28.02.2010, 19:12     Перегрузка оператора #5
Оператор = должен быть членом класса, поэтому оператор с левосторонним операндом стандартного типа невозможен.
Algid
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 13
28.02.2010, 19:16  [ТС]     Перегрузка оператора #6
А разве 4я строка согласуется с 14ой?
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
28.02.2010, 20:02     Перегрузка оператора #7
Михаэль, неправ! оператор может быть как членом так и другом

нет, нужно float **,извините 2-е суток не спал
Михаэль
0 / 0 / 0
Регистрация: 22.02.2010
Сообщений: 15
28.02.2010, 22:19     Перегрузка оператора #8
Цитата Сообщение от breate Посмотреть сообщение
Михаэль, неправ! оператор может быть как членом так и другом
Не любой оператор. Есть операторы, которые могут быть только членами класса. К таковым относятся операторы =, [] и ().

Следующий код при компиляции выдает ошибку:

C++
1
2
3
4
5
6
7
class A
{
    friend int &operator = (int &, const A &);
};
 
void main()
{}
error C2801: 'operator =' must be a non-static member
Algid
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 13
28.02.2010, 22:54  [ТС]     Перегрузка оператора #9
Кстати строка friend float** operator=(float **a,Matrix &m) выдаёт тоже ошибку
'operator =' must be a non-static member
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2010, 01:45     Перегрузка оператора
Еще ссылки по теме:

C++ Перегрузка оператора +
C++ Перегрузка оператора <<
Перегрузка оператора + C++

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

Или воспользуйтесь поиском по форуму:
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
01.03.2010, 01:45     Перегрузка оператора #10
Цитата Сообщение от Algid Посмотреть сообщение
Кстати строка friend float** operator=(float **a,Matrix &m) выдаёт тоже ошибку
'operator =' must be a non-static member
значит не хватает & перед operator

Добавлено через 35 минут
Цитата Сообщение от breate Посмотреть сообщение
Цитата:
Сообщение от Algid
Кстати строка friend float** operator=(float **a,Matrix &m) выдаёт тоже ошибку
'operator =' must be a non-static member
значит не хватает & перед operator
прошу прощения
The following operators can be overloaded only as nonstatic members:

Assignment =

Class member access ->

Subscripting []

Function call ()

Possible C2801 causes:

Overloaded operator is not a class, structure, or union member.
мы не можем перегружать эти операторы для встроенных классов
Yandex
Объявления
01.03.2010, 01:45     Перегрузка оператора
Ответ Создать тему
Опции темы

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